Existe uma diferença entre promise.então.envencional.Então; promise.then

Eu quero saber se há alguma diferença entre os dois seguintes?

  1. aPromiseObj.then(fn1).then(fn2).catch(fn3);
  2. aPromiseObj.then(fn1); aPromiseObj.then(fn2); aPromiseObj.catch(fn3);

O stream de trabalho será alterado?

ps: Eu estou em ambiente angular, embora eu gostaria de pensar isso em um termo mais amplo.

Você perguntou sobre “encadeamento” versus “ramificação” .

Assumindo que f1 e f2 representam operações assíncronas que retornam promises, sim, há uma diferença significativa. Para a opção 1:

  1. Ele serializa fn1 e fn2 para que fn2 não seja chamado até que a promise retornada por fn1 seja resolvida.
  2. .catch() aplica-se a um erro em fn1 ou fn2
  3. fn2 não será chamado se fn1 rejeitar.

Para a opção 2:

  1. fn2 não espera que fn1 resolva. fn2 é chamado assim que fn1 retorna similar a fn1(); fn2(); fn1(); fn2(); . Isso significa que as operações assíncronas iniciadas por fn1 e fn2 serão ambas em fn2 ao mesmo tempo (às vezes, chamadas em paralelo, em vez de serem executadas em série).
  2. O .catch() não se aplica a nenhum dos dois, porque não está na promise criada por uma das chamadas .then() .
  3. Ambos fn1 e fn2 serão chamados independentemente de um erro em ambos.

Outra questão / resposta relacionada: Noções básicas sobre promises de javascript; pilhas e encadeamento