Проміс: 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
, а в другому його немає, тому помилка не оброблена.