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?