Promise и таймер: порядок start, final и обработчиков

Порядок вывода: start → promise constructor → final → promise1 → promise3 → promise4 → timeout. Promise и promise2 не выводятся.

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

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

Порядок вывода: start → promise constructor → final → promise1 → promise3 → promise4 → timeout. Promise и promise2 не выводятся.

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

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

Условие

console.log('start'); // 1

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

new Promise((resolve, reject) => {

console.log('promise constructor'); // 2

reject(); }).then(() => console.log('promise')) // .catch(() => console.log('promise1')) // .catch(() => console.log('promise2')) // .then(() => console.log('promise3')) // .then(() => console.log('promise4')); //

console.log('final'); // 3

Ответ

Порядок вывода: start → promise constructor → final → promise1 → promise3 → promise4 → timeout. Promise и promise2 не выводятся.

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

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

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

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

Подробнее