назад до уроку

Проміс: then проти catch

Чи рівні ці фрагменти коду? Іншими словами, чи поводяться вони однаково за будь-яких обставин для будь-яких функцій обробника?

promise.then(f1).catch(f2);

Проти:

promise.then(f1, f2);

Коротка відповідь: ні, вони не рівні:

Різниця полягає в тому, що якщо помилка відбувається в f1, тоді її обробляє .catch тут:

promise
  .then(f1)
  .catch(f2);

…Але не тут:

promise
  .then(f1, f2);

Це тому, що помилка передається по ланцюжку, а в другому фрагменті коду немає ланцюжка нижче f1.

Іншими словами, .then передає результати/помилки наступному .then/catch. Отже, у першому прикладі нижче є catch, а в другому його немає, тому помилка не оброблена.