Chaining
Um dos maiores problemas com o uso de callbacks em operações assíncronas é o conhecido como callback hell. Ele acaba tornando seu código horizontal, dificultando a legibilidade.
façaAlgo(function(resultado) {
façaOutraCoisa(resultado, function(novoResultado) {
façaOutraCoisaDiferente(novoResultado, function(resultadoFinal) {
console.log(`Resultado final: ${resultadoFinal}`);
}, callbackErro);
}, callbackErro);
}, callbackErro);Para contornar esse (e outros) problema(s) foram idealizadas as Promises que, por meio do chamado chaining, contornam o callback hell.
façaAlgo()
.then(function(resultado) {
return façaOutraCoisa(resultado);
})
.then(function(novoResultado) {
return façaOutraCoisaDiferente(novoResultado)
})
.then(function(resultadoFinal) {
console.log(`Resultado final: ${resultadoFinal}`);
})
.catch(callbackErro);Mesmo com o exemplo acima sendo pequeno, fica claro o ganho de legibilidade com o uso de chaining em Promises ao invés do callback hell.
Um erro comum é tentar fazer promise chaining adicionando varios .then a uma mesma promise.
Como não esta sendo feito o chaining e sim apenas adicionando varios .then() na promise, a execução desses .then() é feita de forma independente.
Tambem é possivel retornar uma promise dentro de outra promise.
Last updated
Was this helpful?