Порядок вывода: 5, 1, 3, 4, 2. Вложенный queueMicrotask добавляет новую микрозадачу в конец той же очереди, которая очищается до перехода к таймеру.
Какой результат появится в консоли – пример 73
Порядок вывода: 5, 1, 3, 4, 2. Вложенный queueMicrotask добавляет новую микрозадачу в конец той же очереди, которая очищается до перехода к таймеру.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Какой вывод будет получен в консоли при выполнении следующего кода:
Promise.resolve().then(() => console.log(1));
setTimeout(() => console.log(2), 10);
queueMicrotask(() => {
console.log(3);
queueMicrotask(() => console.log(4));
});
console.log(5);
Ответ
Порядок вывода: 5, 1, 3, 4, 2. Вложенный queueMicrotask добавляет новую микрозадачу в конец той же очереди, которая очищается до перехода к таймеру.
Сначала синхронно печатается 5. Затем выполняется ранее зарегистрированный then с 1, после него callback queueMicrotask с 3. Он регистрирует ещё одну микрозадачу с 4, и она также исполняется до задачи таймера.
Задержка 10 мс не заставляет таймер вклиниться между микрозадачами. Даже если срок таймера уже наступил, текущая микрозадачная очередь сначала должна освободиться.