2
我試圖在其狀態設置爲成功之前向現有Deferred的合同添加另一個異步調用。而不是試圖和在英國解釋這一點,請參閱下面的僞代碼:jQuery Deferred - 向延遲合同添加回調
$.when(
$.ajax({
url: someUrl,
data: data,
async: true,
success: function (data, textStatus, jqXhr) {
console.log('Call 1 done.')
jqXhr.pipe(
$.ajax({
url: someUrl,
data: data,
async: true,
success: function (data, textStatus, jqXhr) {
console.log('Call 2 done.');
},
})
);
},
}),
$.ajax({
url: someUrl,
data: data,
async: true,
success: function (data, textStatus, jqXhr) {
console.log('Call 3 done.');
},
})
).then(function(){ console.log('All done!'); });
基本上,呼叫2是依賴於呼叫1的結果。我想呼叫1和呼叫3中並行地執行。一旦完成所有3個通話,我想要執行所有完成代碼。我的理解是,Deferred.pipe()
應該將另一個異步調用鏈接給給定的延遲,但實際上,我總是在完成所有之後完成Call 2。
有誰知道如何讓jQuery的延期做我想做的?希望解決方案不涉及將代碼拆分成塊。
感謝您的任何幫助。
更新:請參閱我的follow up question。
最後一行應該是'.done',而不是'.then' – Alnitak
@Alnitak:這有什麼關係嗎? –
它在1.8+中,其中'.then'現在等同於'.pipe'本身 – Alnitak