【问题标题】:jQuery deferred - do I need pipes or chains to achieve this pattern?jQuery deferred - 我需要管道或链来实现这种模式吗?
【发布时间】:2011-10-02 14:46:36
【问题描述】:

我正在尝试使用延迟的 JQuery 来实现以下场景,但运气不佳。

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

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

等到这个调用返回

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

等到所有 serviceB 调用都返回

然后是对 serviceC 的最终 ajax 调用

【问题讨论】:

    标签: javascript jquery ajax jquery-deferred


    【解决方案1】:

    你可以这样做(或多或少的伪代码):

    (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 返回的承诺对象。

    可能有一个比dataresolve 在共享范围内“更干净”的解决方案,但设置会更困难一些(并且不一定更具可读性)。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-30
    • 1970-01-01
    • 2013-01-23
    相关资源
    最近更新 更多