Подтвердить что ты не робот

Есть ли разница между обещаниями. Затем, затем против обещания. promise.then

Я хочу знать, есть ли разница между следующими двумя?

  • aPromiseObj.then(fn1).then(fn2).catch(fn3);
  • aPromiseObj.then(fn1); aPromiseObj.then(fn2); aPromiseObj.catch(fn3);

Будет ли изменен рабочий поток?

ps: Я в среде angular, хотя я бы хотел подумать об этом в более широком смысле.

4b9b3361

Ответ 1

Вы спросили о цепочке против "ветвления.

Предполагая, что f1 и f2 представляют асинхронные операции, возвращающие promises, да, существует значительная разница. Для варианта 1:

  • Он сериализует fn1 и fn2, поэтому fn2 не вызывается до тех пор, пока не будет разрешено обещание, возвращенное fn1.
  • .catch() применяется к ошибке в fn1 или fn2
  • fn2 не будет вызываться, если fn1 отклоняется.

Для варианта 2:

  • fn2 не ждет разрешения fn1. fn2 вызывается, как только fn1 возвращает аналогично fn1(); fn2();. Это означает, что асинхронные операции, начинающиеся с fn1 и fn2, будут одновременно выполняться в полете (иногда они называются параллельными, а не серийными).
  • .catch() не применяется ни к чему, потому что это не обещание, созданное одним из вызовов .then().
  • Оба fn1 и fn2 будут вызываться независимо от ошибки в.

Другой связанный вопрос/ответ: Понимание javascript promises; стеки и цепочка