jQuery Deferred - 等待动态异步请求完成所有操作,即使有些失败也是如此

Mar*_*arl 4 jquery asynchronous jquery-deferred

我得到了一个动态异步请求(对于jsfiddle,我使用了ajax),无论成功与否,我都需要等待,这意味着即使某些请求失败,我也只需要知道所有进程都已完成.

//动态:在我的情况下,这是由ajax请求产生的,因此后续异步请求的数量是灵活的

所以我最初使用这段代码:

    $.when.apply($,deferreds).done(function() {
        $("div").append("<p>All done!</p>");
    }).fail(function(){
        $("div").append("<p>Something failed!</p>");
    });
Run Code Online (Sandbox Code Playgroud)

但是在其中一个延迟失败的情况下,将立即调用失败回调.我尝试将其更改为always(),但结果是:

未捕获的TypeError:对象#没有方法'总是'

那么如何为此实现always()类型的解决方案呢?

小提琴

我的原始资料来源:jQuery Deferred - 等待多个AJAX请求完成

Mor*_*hak 9

如果你只是想等待一个列表$.Deferred结束而不管它们是什么,rejected或者resolved你在原始源代码中得到解决方案jQuery Deferred - 等待多个AJAX请求完成:

$.when.apply($, $.map(deferreds, function(d) {
    var wrapDeferred = $.Deferred();
    // you can add .done and .fail if you want to keep track of each results individualy
    d.always(function() { wrapDeferred.resolve(); });
    return wrapDeferred.promise();
}));
Run Code Online (Sandbox Code Playgroud)