jQuery Deferred Piping
by ryanwheale
JavaScript
$(function () {
var deferreds = {};
function createDeferreds() {
var num = 3;
while (num--) {
(function (num) {
num++;
deferreds["def" + num] = $.Deferred().done(function (results) {
console.log("Deffered", num, "resolved.", results);
}).fail(function (results) {
console.log("Deffered", num, "failed.", results);
});
}(num));
}
}
function returnDef (num) {
return function() {
console.log(" - returning def", num);
return deferreds["def" + num];
};
}
function resolveDef (num) {
deferreds["def" + num].resolve("Resolved #" + num);
}
function rejectDef (num) {
deferreds["def" + num].reject("~~ Rejected #" + num);
}
function allDone (results) {
console.log("ALL DONE:", results);
}
function handleFail (message) {
console.log("SOMETHING WENT WRONG:", message);
}
var tests = {
passOne: function () {
deferreds.def1.done(allDone);
resolveDef(1);
},
allPass: function () {
deferreds.def1
.then(returnDef(2))
.then(returnDef(3))
.done(allDone);
resolveDef(1);
resolveDef(2);
resolveDef(3);
},
allPassWithDone: function () {
deferreds.def1
.done(returnDef(2))
.done(returnDef(3))
.done(allDone);
resolveDef(1);
resolveDef(2);
resolveDef(3);
},
failTwo: function() {
deferreds.def1
.then(returnDef(2))
.then(returnDef(3))
.done(allDone)
.fail(handleFail);
...