Порядок вывода: 6, 2, 1, 3, 4, 5, 7. Микрозадачи выполняются после текущей задачи, в том числе между отдельными callbacks таймеров.
Определите порядок вывода в консоль (пример 107)
Порядок вывода: 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 в асинхронную очередь.