我正在尝试实现下面的场景,使用JQuery延迟,没有太多运气。
您将使用延迟api的哪些部分,以及如何构建您的呼叫以实现以下目标:
第一个ajax callA到serviceA检索ID列表
等到此调用返回
然后n ajax调用serviceB,每次调用使用callA返回的列表中的Id
等待所有serviceB调用返回
然后是对serviceC的最终ajax调用
答案 0 :(得分:12)
你可以这样做(或多或少伪代码):
(function() {
// new scope
var data = []; // the ids coming back from serviceA
var deferredA = callToServiceA(data); // has to add the ids to data
deferredA.done(function() { // if callToServiceA successful...
var deferredBs = [];
for i in data {
deferredBs.push(callToServiceB(...));
}
$.when.apply($, deferredBs).then(callToServiceC);
});
}());
callToServiceX
函数应返回$.ajax
返回的promise对象。
可能有一个“更清洁”的解决方案,而不是在resolve
的共享范围内使用data
,但设置会更困难(并且不一定更具可读性)。