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

Порядок вывода: 6, 2, 1, 3, 4, 5, 7. Микрозадачи выполняются после текущей задачи, в том числе между отдельными callbacks таймеров.

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

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

Порядок вывода: 6, 2, 1, 3, 4, 5, 7. Микрозадачи выполняются после текущей задачи, в том числе между отдельными callbacks таймеров.

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

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

Условие

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

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

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

Promise.resolve().then(() => console.log(1));

console.log(6);

setTimeout(() => console.log(7));
console.log(2);

Ответ

Порядок вывода: 6, 2, 1, 3, 4, 5, 7. Микрозадачи выполняются после текущей задачи, в том числе между отдельными callbacks таймеров.

Синхронный код сначала печатает 6 и 2. Затем выполняется then уже завершённого Promise и печатает 1.

Первый зарегистрированный таймер создаёт Promise; его executor синхронно печатает 3, а then становится микрозадачей. Она печатает 4 до перехода к следующему таймеру. Оставшиеся таймеры выводят 5 и 7 в порядке регистрации. Конструктор Promise сам по себе не переносит executor в асинхронную очередь.

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

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

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

Подробнее