Faça algo quando todas as tarefas assíncronas a, b, c, d forem concluídas.
A primeira tarefa
function doFirstTask(){
var d = $.Deferred();
setTimeout(function(){
console.log("im done");
d.resolve();
}, 2000);
return d;
}
Agora a segunda tarefa
function doSecondTask(){
setTimeout(function(){
console.log("im done too");
d.resolve();
}, 2000);
return d;
}
Tarefa final
function doThirdTask(){
setTimeout(function(){
console.log("all done");
d.resolve();
}, 2000);
return d;
}
O encadeamento mágico
doFirstTask().then(doSecondTask).then(doThirdTask);
Bônus!
Todas as chamadas Jquery Ajax retornam um objeto de promessa (adiada)
// wait for multiple sets to finish
var r = $.ajax(),
m = $.ajax();
$.when( r, m ).done(function() {
// do something
});