console.log('start'); //

Вывод: start, promise constructor, final, promise1, promise3, promise4, timeout. Обработчик promise и второй catch с promise2 пропускаются.

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

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

Вывод: start, promise constructor, final, promise1, promise3, promise4, timeout. Обработчик promise и второй catch с promise2 пропускаются.

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

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

Условие

console.log('start'); //

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

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

console.log('final'); //

Ответ

Вывод: start, promise constructor, final, promise1, promise3, promise4, timeout. Обработчик promise и второй catch с promise2 пропускаются.

Executor выполняется сразу и отклоняет Promise. После завершения синхронного кода первый catch обрабатывает rejection и возвращает undefined, поэтому дальнейшая цепочка становится успешной. Оба последующих then выполняются как микрозадачи раньше таймера. Нулевой timeout не означает немедленное выполнение.

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

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

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

Подробнее