Определение последовательности вывода в консоль (пример №99)

Порядок: 1, 7, 3, 5, 4, 2, 6. Второй then попадает в очередь только после выполнения первого, поэтому queueMicrotask с числом 5 выполняется раньше него.

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

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

Порядок: 1, 7, 3, 5, 4, 2, 6. Второй then попадает в очередь только после выполнения первого, поэтому queueMicrotask с числом 5 выполняется раньше него.

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

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

Условие

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

console.log(1);

setTimeout(() => {
  console.log(2);
}, 0);

Promise.resolve().then(() => {
  console.log(3);
}).then(() => {
  console.log(4);
});

queueMicrotask(() => {
  console.log(5);
});

setTimeout(() => {
  console.log(6);
}, 0);

console.log(7);

Ответ

Порядок: 1, 7, 3, 5, 4, 2, 6. Второй then попадает в очередь только после выполнения первого, поэтому queueMicrotask с числом 5 выполняется раньше него.

Сначала исполняется синхронный код с 1 и 7. Изначально в очереди микрозадач стоят первый then и callback queueMicrotask. Первый печатает 3 и добавляет следующий then в конец очереди; затем печатаются 5 и 4. После опустошения микрозадач запускаются таймеры в порядке регистрации — 2 и 6. Цепочка then не выполняется целиком как одна микрозадача.

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

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

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

Подробнее