Gerenciar eventos assíncronos com promessa Jquery

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
});