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