В консоли будут 5 и 20. Первый then пропускается из-за отклонения; catch печатает причину и возвращает 10, переводя дальнейшую цепочку в успешное состояние.
Управление ошибкой в цепочке промисов и дальнейшее её выполнение
В консоли будут 5 и 20. Первый then пропускается из-за отклонения; catch печатает причину и возвращает 10, переводя дальнейшую цепочку в успешное состояние.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Разобрать, как работает последовательность промисов при возникновении отклонения, как обрабатывается ошибка через catch, какое влияние имеет возвращаемое значение из обработчика ошибки на дальнейшие .then, и как происходит передача результатов по цепочке.
Promise.reject(5)
.then(console.log)
.catch((err) => {
console.log(err);
return 10;
})
.then(() => 10)
.then((data) => console.log(data * 2));
Ответ
В консоли будут 5 и 20. Первый then пропускается из-за отклонения; catch печатает причину и возвращает 10, переводя дальнейшую цепочку в успешное состояние.
Следующий .then(() => 10) игнорирует переданный результат catch и независимо возвращает то же число 10. Последний then получает 10 и печатает 20. Если catch вместо возврата выбросит ошибку или вернёт отклонённый Promise, успешные then ниже будут пропущены. Нормальное завершение обработчика ошибки означает восстановление цепочки, даже если он вернул undefined.