Порядок: D, A, C, B. Вложенный таймер запускается отдельной будущей задачей, а микрозадача C выполняется после текущего callback.
Вложенный таймер и микрозадача: порядок выполнения
Порядок: D, A, C, B. Вложенный таймер запускается отдельной будущей задачей, а микрозадача C выполняется после текущего callback.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Что выведет браузер?
setTimeout(() => {
console.log('A');
setTimeout(() => console.log('B'), 0);
Promise.resolve().then(() => console.log('C'));
}, 0);
console.log('D');
Ответ
Порядок: D, A, C, B. Вложенный таймер запускается отдельной будущей задачей, а микрозадача C выполняется после текущего callback.
Когда первый таймер выполняет A, он только планирует B. Затем ставится реакция Promise C. После завершения callback выполняется очередь микрозадач, и лишь позже наступает очередь вложенного таймера. Реальные интервалы зависят от среды и нагрузки, но это не меняет указанную причинную последовательность.