Как Promise.then и queueMicrotask делят очередь?

Порядок: 1, 5, 2, 3, 4. Реакция уже выполненного Promise и queueMicrotask ставят микрозадачи в порядке вызовов; таймер исполняется после них.

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

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

Порядок: 1, 5, 2, 3, 4. Реакция уже выполненного Promise и queueMicrotask ставят микрозадачи в порядке вызовов; таймер исполняется после них.

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

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

Условие

Определите вывод браузерного скрипта:

console.log(1);
Promise.resolve().then(() => console.log(2));
queueMicrotask(() => console.log(3));
setTimeout(() => console.log(4), 0);
console.log(5);

Ответ

Порядок: 1, 5, 2, 3, 4. Реакция уже выполненного Promise и queueMicrotask ставят микрозадачи в порядке вызовов; таймер исполняется после них.

Сначала завершается синхронный скрипт с 1 и 5. Callback then был поставлен раньше queueMicrotask, поэтому 2 идёт перед 3. В этом примере между ними нет дополнительных await, новых Promise-цепочек или внешних событий. Вывод нельзя обобщать до «Promise всегда раньше queueMicrotask»: если поменять порядок постановки, поменяется и их порядок исполнения.

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

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

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

Подробнее