jQuery延迟 - 我需要管道或链来实现这种模式吗?

时间:2011-07-11 08:23:29

标签: javascript jquery ajax jquery-deferred

我正在尝试实现下面的场景,使用JQuery延迟,没有太多运气。

您将使用延迟api的哪些部分,以及如何构建您的呼叫以实现以下目标:

第一个ajax callA到serviceA检索ID列表

等到此调用返回

然后n ajax调用serviceB,每次调用使用callA返回的列表中的Id

等待所有serviceB调用返回

然后是对serviceC的最终ajax调用

1 个答案:

答案 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,但设置会更困难(并且不一定更具可读性)。