Ria*_*ana 6 ajax jquery promise
我有一些(比方说5)ajax请求,我通过使用jQuery.ajax函数同时运行.
现在我想同步和聚合他们的结果,我用jQuery.when函数来实现这一点.
我的问题是,$.when只要其中一个请求失败就会返回,并阻止其他请求返回,即使它们成功.
我怎样才能sycnhronize并得到所有从我所有的Ajax请求(结果那些失败,那些成功的)?
工作演示: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。
可能有更有效的方法来实现相同的目的,尽管这是我首先想到的。