whenAll jQuery Plugin
jQuery plugin to signal when multiple defers (usuaylly Ajax calls) are finished no matter their resolution.
by baohouse
JavaScript
(function ($) {
$.whenAll = function (deferreds) {
var lastResolved = 0;
var wrappedDeferreds = [];
for (var i = 0; i < deferreds.length; i++) {
wrappedDeferreds.push($.Deferred());
if (deferreds[i] && deferreds[i].always) {
deferreds[i].always(wrappedDeferreds[lastResolved++].resolve);
} else {
wrappedDeferreds[lastResolved++].resolve(deferreds[i]);
}
}
return $.when.apply($, wrappedDeferreds).promise();
};
}(jQuery));
var goodDfd = new $.Deferred();
var badDfd = new $.Deferred();
$.whenAll([1, null, goodDfd, badDfd])
.done(
function(result1, result2, result3, result4) {
$('body').append(result1);
$('body').append("<br/>");
$('body').append(result2);
$('body').append("<br/>");
$('body').append(result3);
$('body').append("<br/>");
$('body').append(result4);
});
setTimeout(function () {
goodDfd.resolve("Good, resolved after 500ms");
}, 500);
setTimeout(function () {
badDfd.reject("Bad, rejected after 1000ms");
}, 1000);