jQuery whenAll method
A method of waiting for all promises to return or a timeout occurs, regardless of failure or success.
by Kato Richardson
HTML
<script src="https://raw.github.com/Zenovations/jQuery-whenAll/master/jquery.whenall.min.js"></script>
<h1>$.when() vs $.whenAll()</h1>
<ul id="log"></ul>
CSS
body {
font-family: Verdana;
}
h1 {
font-size: 20px;
border-bottom: 1px solid black;
margin: 1em;
}
ul {
margin: 1em;
}
li {
margin: 0.4em;
}
strong {
font-weight: bolder;
}
span {
color: red;
}
JavaScript
var a = $.Deferred(),
b = $.Deferred(),
c = $.Deferred(),
d = $.Deferred();
$.when(a, b, c).always(handle("when", [a, b, c]));
$.whenAll(a, b, c).always(handle("whenAll", [a, b, c]));
$.whenAllExpires(1000, a, b, c, d).always(handle('whenAllExpires', [a, b, c, d]));
a.resolve();
b.reject();
c.resolve();
function log(name, elms, whenAllArray) {
//console.log(exp);
var results = [];
jQuery.each(elms, function(i, e) {
var letters = 'abcdefg';
var c = letters[i];
var state = e.state();
var exp = whenAllArray && whenAllArray[i];
switch (e.state()) {
case 'pending':
state = '<span>' + (exp || state) + '</span>';
break;
case 'rejected':
e.fail(function(msg) {
//console.log(e);
msg && (state = msg);
});
break;
}
results.push(c + ".state: " + state);
});
jQuery("<li/>", {
html: "<strong>[" + name + "]</strong>:<br />" + results.join('<br />')
}).appendTo("#log");
}
function handle(name, elms) {
return function(e) {
log(name, elms, e);
}
}