В последнем console.log будет undefined, если промежуточный then не перехватывает ошибку. catch выводит 2 и своим неявным return завершает цепочку успешно со значением undefined.
Для цепочки 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.
throw 2 отклоняет производный Promise, поэтому обычные success-обработчики then пропускаются до catch. console.log возвращает undefined, которое и получает следующий then. Если в пропущенной части есть собственный обработчик rejection или бросающий finally, результат может отличаться; вывод относится к описанному обычному продолжению цепочки.