JSFiddle - React, Tailwind, and code Playground
HTML
Items remaining: <span id="msg"></span>
JavaScript
(function ($) {
$.whenAlways = function (chain) {
if (!chain || !$.isArray(chain)) chain = $.extend([], arguments);
var n = chain.length;
return $.Deferred(function (deferred) {
$.each(chain, function (i, promise) {
if (!promise.always) n--;
else {
promise.always(function () {
deferred.notify(--n);
if (n == 0) deferred.resolve();
});
}
});
if (n == 0) deferred.resolve();
}).promise();
}
})(jQuery);
function makePromise(t) {
return $.Deferred(function (dfrd) {
setTimeout(dfrd.resolve, t);
}).promise();
}
var pArr = [
makePromise(4000),
makePromise(2000),
makePromise(1000),
makePromise(5000),
makePromise(3000)
];
$("#msg").text(pArr.length);
$.whenAlways(pArr).progress(function (n) {
$("#msg").text(n);
}).done(function() {
$("#msg").text('zero');
});