Для цепочки Promise.resolve(1).then(() => { throw 2 }).then(...).catch(x => console.log(x)).then(x => console.log(x)) определите, что будет в последнем console.log, и объясните почему.

В последнем console.log будет undefined, если промежуточный then не перехватывает ошибку. catch выводит 2 и своим неявным return завершает цепочку успешно со значением undefined.

Короткий ответ

Что ответить на собеседовании

В последнем console.log будет undefined, если промежуточный then не перехватывает ошибку. catch выводит 2 и своим неявным return завершает цепочку успешно со значением undefined.

Подробный разбор

Ответ с пояснениями

В последнем console.log будет undefined, если промежуточный then не перехватывает ошибку. catch выводит 2 и своим неявным return завершает цепочку успешно со значением undefined.

throw 2 отклоняет производный Promise, поэтому обычные success-обработчики then пропускаются до catch. console.log возвращает undefined, которое и получает следующий then. Если в пропущенной части есть собственный обработчик rejection или бросающий finally, результат может отличаться; вывод относится к описанному обычному продолжению цепочки.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее