Delayed Deferreds using .delay()
JavaScript
(function($) {
var delay = function(ms) {
var dfd = $.Deferred();
window.setTimeout(dfd.resolve, ms);
return dfd;
};
$.delay = function(ms) {
return function() {
return delay(ms);
};
};
})(jQuery);
// An example async function
var someAsyncFunc = function() {
var dfd = $.Deferred();
console.log("Async function called");
setTimeout(function() {
console.log("Async function completed");
dfd.resolve();
}, 1000);
return dfd;
};
// Delayed deferreds
$.Deferred().resolve()
.pipe(function() {
console.log("Start!");
})
.pipe($.delay(10000))
.pipe(function() {
console.log("1 second later");
})
.pipe($.delay(1000))
.pipe(function() {
console.log("1 second after that");
})
.pipe(someAsyncFunc) // Doesn't resolve for 1 second
.pipe($.delay(1000))
.pipe(function() {
console.log("1 second later");
})
.done(function() {
console.log("Done!");
});