0
我現在有一系列需要按照一定的順序來執行AJAX調用。沒有一個是完全可行的。系列的jQuery調用
但實質上所有的performSeriesofCalls
確實是按照Call1 -> Call2 -> Call3 -> Call4 -> Call5
的確切順序進行ajax調用。
performSeriesofCalls: function() {
doThisFirst(function() {
Service.call1(arg1,arg2).done(function (modelData) {
updateModel(modelData);
var saveId = modelData.Id1;
var discardId = modelData.id2;
Service.call2(saveId, arg4).done(function() {
Service.call3(discardId).done(function() {
Service.call4(saveId).done(function() {
Service.call5(saveId).done(function (savedModel) {
updateModel(savedModel);
updateMessage("Performed");
});
});
});
});
});
});
}
看着例子here和Stackoverflow answer: ordering ajax calls並試圖重構爲以下使用jQuery.when(),但我想知道是否可以做的更好。
performSeriesofCalls: function() {
doThisFirst(function() {
Service.call1(arg1,arg2).done(function (modelData) {
updateModel(modelData);
var saveId = modelData.Id1;
var discardId = modelData.id2;;
jQuery.when(
Service.call2(saveId, arg4)
).done(function() {
jQuery.when(
Service.call3(discardId),
Service.call4(saveId)
).done(function() {
Service.call5(saveId).done(function (savedModel) {
updateModel(savedModel);
updateMessage("Performed");
});
});
});
});
});
}
注意:Service.js包含實際的ajax請求爲了模塊化。在Service.js
樣品呼籲
/**
* Update Status
* @returns {jqXHR} From the jQuery.ajax() call
*/
call2: function (quoteId, action) {
return jQuery.ajax({
method: "POST",
url: serviceURL + "/endpoint/" + quoteId + "/action",
data: JSON.stringify(action),
contentType: "application/json"
});
}
請問您服務調用返回的承諾? – Dekel
定義了「arg3」和「arg4」在哪裏? – guest271314
@dekel更新了Service.js中的調用示例。 – daredadevil