Порядок: 1, 5, 2, 3, 4. Реакция уже выполненного Promise и queueMicrotask ставят микрозадачи в порядке вызовов; таймер исполняется после них.
Как Promise.then и 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»: если поменять порядок постановки, поменяется и их порядок исполнения.