Evitando chamadas assíncronas aninhadas em JS

Em vez de ter duas chamadas aninhadas (assíncronas) para garantir que uma carregue para executar a outra, você pode usar deffereds. Verifique jQuery.when (deferreds). Consulte as chamadas com $ .when e use um “.then” encadeado que acontece quando essas chamadas são resolvidas ou rejeitadas. Parece muito humano legível para mim.

// Nested calls    

function doSomething(){
$
.getJSON('/api/users', function(data) {
var Users = data.users;
$
.getJSON('/api/skills', function(data) {
// doSomethingElse( Users, data.skills ); // do callback
});
});
}

// Cleaner

function doSomething(){
$
.when( $.getJSON('/api/users'), $.getJSON('api/skills') ).then(function( users, skills ){
// doSomethingElse( users, skills ); // both resolved here
});
}​​