Порядок вывода в консоль (пример 10)

Порядок: start, promise constructor, final, promise2, promise4, timeout. Первый then пропускается из-за reject, а второй catch не срабатывает после успешного первого catch.

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

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

Порядок: start, promise constructor, final, promise2, promise4, timeout. Первый then пропускается из-за reject, а второй catch не срабатывает после успешного первого catch.

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

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

Условие

Определите, какие строки появятся в консоли при выполнении следующего кода JavaScript.

console.log('start'); //

setTimeout(() => console.log('timeout'), 0); //

new Promise((resolve, reject) => {
  console.log('promise constructor'); //
  reject();
})
  .then(() => console.log('promise1')) //
  .catch(() => console.log('promise2')) //
  .catch(() => console.log('promise3')) //
  .then(() => console.log('promise4')); //

console.log('final'); //

Ответ

Порядок: start, promise constructor, final, promise2, promise4, timeout. Первый then пропускается из-за reject, а второй catch не срабатывает после успешного первого catch.

Executor выполняется синхронно и печатает promise constructor. reject делает Promise отклонённым; после текущего стека ошибка проходит через then до catch, который печатает promise2 и возвращает undefined. Цепочка становится успешной, поэтому catch с promise3 пропускается, а then с promise4 выполняется. Все эти микрозадачи завершаются до timer-callback с timeout.

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

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

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

Подробнее