В исходном виде код не выполняется: лишний I нарушает синтаксис, а у Promise нет метода them. После исправления I и замены them на then вывод будет 2, затем undefined.
Что будет выведено в консоль (пример 87)
В исходном виде код не выполняется: лишний I нарушает синтаксис, а у Promise нет метода them. После исправления I и замены them на then вывод будет 2, затем undefined.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Определите, какой вывод появится в консоли при выполнении следующего кода:
Promise.resolve(1)
.them(x => x + 1) I
.them(x => { throw x })
.them(x => console.log(x))
.catch(err => console.log(err))
.them(x => Promise.resolve(x))
.catch(err => console.log(err))
.them(x => console.log(x))
Ответ
В исходном виде код не выполняется: лишний I нарушает синтаксис, а у Promise нет метода them. После исправления I и замены them на then вывод будет 2, затем undefined.
Promise.resolve(1) передаёт 1 первому обработчику, тот возвращает 2. Следующий выбрасывает 2, поэтому ближайший success-handler пропускается. catch печатает 2 и возвращает undefined, восстанавливая fulfilled-состояние цепочки.
Дальше Promise.resolve(undefined) успешно завершается; второй catch не вызывается, а последний then печатает undefined. Если убрать лишь лишний I, первая попытка вызвать .them даст TypeError вне цепочки, и её собственный catch не успеет быть присоединён.