Что отобразится в консоли при выполнении данного JavaScript‑кода

Вывод: 7, 2, 5, 1, 4, 6, 3. Promise с выводом 4 сначала ждёт своего таймера, а таймер с 3 регистрируется только из микрозадачи.

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

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

Вывод: 7, 2, 5, 1, 4, 6, 3. Promise с выводом 4 сначала ждёт своего таймера, а таймер с 3 регистрируется только из микрозадачи.

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

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

Условие

Нужно предсказать, какие значения появятся в консоли после запуска следующего фрагмента кода.

setTimeout(() => console.log(1));

Promise.reject(2).catch(console.log);

Promise.resolve().then(() => setTimeout(() => console.log(3)));

new Promise((resolve) => setTimeout(resolve)).then(() => console.log(4));

Promise.resolve(5).then(console.log);

setTimeout(() => console.log(6));

console.log(7);

Ответ

Вывод: 7, 2, 5, 1, 4, 6, 3. Promise с выводом 4 сначала ждёт своего таймера, а таймер с 3 регистрируется только из микрозадачи.

Синхронно печатается 7. В начальной очереди микрозадач находятся catch с 2, регистрация таймера 3 и then с 5 — поэтому видимые сообщения здесь 2 и 5.

К этому моменту раньше таймера 3 уже зарегистрированы таймер 1, таймер разрешения Promise для 4 и таймер 6. После разрешения второго из них микрозадача then выводит 4 до следующей задачи с 6. Последним исполняется отложенный из микрозадачи таймер 3.

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

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

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

Подробнее