Обработка успеха в пользовательской функции javascript

Если я делаю вызов ajax, я могу добавить обработку успеха. Я хочу добавить аналогичную логику в свои пользовательские функции.

У меня есть 6-10 пользовательских функций, которые ДОЛЖНЫ выполняться последовательно или независимо друг от друга. Обычно они не работают независимо друг от друга, поэтому теперь я связал их последовательно, вызывая следующую функцию в конце предыдущей, но это неудобно для чтения и не позволяет выполнять отдельное выполнение.

Я хотел бы иметь что-то вроде этого:

function runall(){
    runfirst().success(
        runsecond().success(
            runthird()
    ))
} 

У меня были другие ситуации, когда я хотел бы добавить обработку .success()к пользовательской функции, но эта ситуация сделала ее более важной.

Если есть другой способ заставить 6-10 функций выполняться синхронно, это могло бы решить эту проблему, но я также хотел бы знать, как добавить обработку успеха в свои пользовательские функции.

Я попробовал следующее, основываясь на предложении @lanzz:

Я добавил .then()к своим функциям:

$bomImport.updateGridRow(rowId).then(function () {
        $bomImport.toggleSubGrid(rowId, false);
});


var $bomImport = {
  updateGridRow: function (rowId) {
    $('#' + rowId + ' td[aria-describedby="bomImport_rev"]').html($("#mxRevTxt").val());
    $('#' + rowId + ' td[aria-describedby="bomImport_itemno"]').html($("#itemNoTxt").val());
    $('#' + rowId + ' td[aria-describedby="bomImport_used"]').html($("#usedTxt").val());
    $('#' + rowId + ' td[aria-describedby="bomImport_partSource"]').html($("#partSourceTxt").val());
    $('#' + rowId + ' td[aria-describedby="bomImport_partClass"]').html($("#partClassTxt").val());
    $('#' + rowId + ' td[aria-describedby="bomImport_partType"]').html($("#partTypeTxt").val());
    $('#' + rowId + ' td[aria-describedby="bomImport_partno"]').html($("#mxPnTxt").val());
    $('#' + rowId + ' td[aria-describedby="bomImport_descript"]').html($("#descTxt").val());
    $('#' + rowId + ' td[aria-describedby="bomImport_qty"]').html($("#qtyTxt").val());
    $('#' + rowId + ' td[aria-describedby="bomImport_custPartNo"]').html($("#custPartNoTxt").val());
    $('#' + rowId + ' td[aria-describedby="bomImport_crev"]').html($("#custRevTxt").val());
    $('#' + rowId + ' td[aria-describedby="bomImport_u_of_m"]').html($("#uomTxt").val());
    $('#' + rowId + ' td[aria-describedby="bomImport_warehouse"]').html($("#warehouseTxt").val());
    $('#' + rowId + ' td[aria-describedby="bomImport_standardCost"]').html($("#stdCostTxt").val());
    $('#' + rowId + ' td[aria-describedby="bomImport_workCenter"]').html($("#wcTxt").val());
    var defferred = new $.Deferred();
    return defferred.promise();
}};

Код правильно идет в конец updateGridRow, не дает ошибок, но никогда не возвращается к вызову второй функции.

Я также попробовал следующее, как было предложено @Anand:

workSheetSaveExit(rowId, isNew).save().updateRow().toggle();
function workSheetSaveExit(){
    this.queue = new Queue;
    var self = this;
    self.queue.flush(this);
}
workSheetSaveExit.prototype = {
  save: function () {
    this.queue.add(function (self) {
        $bomImport.workSheetSave(rowId, isNew);
    });
    return this;
  },
  updateRow: function () {
    this.queue.add(function (self) {
        $bomImport.updateGridRow(rowId);
    });
    return this;
  },
  toggle: function () {
    this.queue.add(function (self) {
        $bomImport.toggleSubGrid(rowId, false);
    });
    return this;
  }
};

Что не сработало.

Окончательное решение
Отличное объяснение того, как использовать deferred и выполнить эту работу, см. здесь: Использование Deferred в jQuery

5
задан Sumurai8 26 June 2015 в 15:40
поделиться