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

zad*_*dam 6 javascript ajax jquery jquery-deferred

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

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

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

等到这个电话回来

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

等到所有serviceB调用都返回

然后是对serviceC的最终ajax调用

Fel*_*ing 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); 
    });

}());
Run Code Online (Sandbox Code Playgroud)

callToServiceX函数应返回由返回的promise对象$.ajax.

可能有一个"更清洁"的解决方案,而不是data在共享范围内resolve,但是设置会更困难(并且不一定更具可读性).