我正在尝试在其状态设置为成功之前向现有 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 个调用后,我希望执行 All Done 代码。我的理解是,Deferred.pipe()
应该将另一个异步调用链接到给定的延迟,但实际上,我总是在 All Done 之后完成 Call 2。
有谁知道如何让 jQuery 的 Deferred 做我想做的事?希望该解决方案不涉及将代码进一步撕成块。
谢谢你的帮助。
更新:请参阅我的后续问题。