jQuery ajax和"when"函数

Ria*_*ana 6 ajax jquery promise

我有一些(比方说5)ajax请求,我通过使用jQuery.ajax函数同时运行.

现在我想同步和聚合他们的结果,我用jQuery.when函数来实现这一点.

我的问题是,$.when只要其中一个请求失败就会返回,并阻止其他请求返回,即使它们成功.

我怎样才能sycnhronize并得到所有从我所有的Ajax请求(结果那些失败,那些成功的)?

Ami*_*rge 0

工作演示:http://jsbin.com/ocawoj/4/edit

function waitForAllPromisesToFinish () {
    var i,
        responses = [],
        deferred = $.Deferred(),
        helpers = {
            addToResponses: function (index, data) {
                responses[index] = data;

                var i = 0,
                    isAnyNull = false;

                for (i = 0; i < responses.length; i++) {
                    if (responses[i] === null) {
                        isAnyNull = true;
                        break;
                    } 
                }

                if (isAnyNull === false) {
                    deferred.resolve(responses);
                }
            },
            setupPromise: function (promise, index) {
                promise.always(function () {
                    var args = Array.prototype.slice.call(arguments);
                    helpers.addToResponses(index, args);
                });
            }
        },
        ajaxPromises = Array.prototype.slice.call(arguments);

    for (i = 0; i < ajaxPromises.length; i++) {
        responses[i] = null;
    }

    for (i = 0; i < ajaxPromises.length; i++) {
        helpers.setupPromise(ajaxPromises[i], i);
    }

    return deferred.promise();
}
Run Code Online (Sandbox Code Playgroud)

该函数返回一个承诺。您附加一个与您提供给 $.when() 的处理程序略有不同的完成处理程序。该函数跟踪每个 ajax Promise 的响应。每当它发现所有 ajax Promise 都已返回数据时,无论成功还是失败,它都会解析该 Promise。

可能有更有效的方法来实现相同的目的,尽管这是我首先想到的。