вернуться к уроку

Промисы: сравните 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, а во втором – нет, то ошибка в нём останется необработанной.