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