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の最後に移動し、エラーは発生しませんが、2番目の関数を呼び出すために戻ることはありません。
@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を使用してこの動作を実現する方法の詳細については、jQueryでのDeferredの使用を
参照してください。