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