首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >jQuery延迟-等待多个AJAX请求完成

jQuery延迟-等待多个AJAX请求完成
EN

Stack Overflow用户
提问于 2011-07-01 01:08:43
回答 3查看 51K关注 0票数 61

我有一个三层深度的延迟ajax调用链,理想情况下,它们会在最深层完成时将承诺一直向上踢(这让我有点像Inception……“我们需要更深入!”)。

问题是我一次发送了许多ajax请求(可能有数百个),并且需要推迟到所有请求都完成之后。我不能相信最后一个是最后完成的。

代码语言:javascript
运行
复制
function updateAllNotes() {
    return $.Deferred(function(dfd_uan) {
        getcount = 0;
        getreturn = 0;
        for (i = 0; i <= index.data.length - 1; i++) {
            getcount++;
            $.when(getNote(index.data[i].key)).done(function() {
                // getNote is another deferred
                getreturn++
            });
        };
        // need help here
        // when getreturn == getcount, dfd_uan.resolve()
    }).promise();
};
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-07-03 00:50:12

您可以使用.when().apply()来实现多个延迟。非常有用:

代码语言:javascript
运行
复制
function updateAllNotes() {
    var getarray = [],
        i, len;

    for (i = 0, len = data.length; i < len; i += 1) {
        getarray.push(getNote(data[i].key));
    };

    $.when.apply($, getarray).done(function() {
        // do things that need to wait until ALL gets are done
    });
}
票数 115
EN

Stack Overflow用户

发布于 2012-11-29 22:08:06

如果参考jQuery.When文档,如果其中一个ajax调用失败,fail主回调将被调用,即使后面所有ajax调用还没有完成。在这种情况下,您不能确定所有呼叫都已完成。

如果你想等待所有的呼叫,不管结果是什么,你必须使用另一个像这样的延迟:

代码语言:javascript
运行
复制
$.when.apply($, $.map(data, function(i) {
    var dfd = $.Deferred();
    // you can add .done and .fail if you want to keep track of each results individualy
    getNote(i.key).always(function() { dfd.resolve(); });
    return dfd.promise();
});
票数 27
EN

Stack Overflow用户

发布于 2012-08-07 06:10:02

谢谢你给我的答案。我还使用了下划线,所以我可以非常清晰地将您的解决方案应用到map中,有点像这样:

代码语言:javascript
运行
复制
$.when.apply($, _.map(data, function(i) {
    return getNote(i.key);
})).done(function() {
    alert('Be Happy');
});

非常有用。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6538470

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档