Порядок: 1, 7, 3, 5, 4, 2, 6. Второй then попадает в очередь только после выполнения первого, поэтому queueMicrotask с числом 5 выполняется раньше него.
Определение последовательности вывода в консоль (пример №99)
Порядок: 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 не выполняется целиком как одна микрозадача.