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