Вопрос проверяет понимание event loop и порядка выполнения синхронного и асинхронного кода.
Сначала всегда выполняется весь синхронный код. Затем выполняются microtasks, в том числе обработчики Promise.then. Только после этого обрабатываются macrotasks, такие как setTimeout. Поэтому вывод в консоль часто отличается от интуитивных ожиданий. Это поведение строго определено спецификацией.
При смешивании синхронного кода и Promise важно понимать приоритеты очередей выполнения.
JavaScript выполняет код в следующем порядке:
Синхронный код текущего стека
Очередь microtasks
Очередь macrotasks
console.log('A')
Promise.resolve().then(() => {
console.log('B')
})
console.log('C')
Выполняется console.log('A')
Регистрируется then, но не выполняется
Выполняется console.log('C')
Очищается очередь microtasks
Выполняется console.log('B')
Результат в консоли:
A
C
B
ожидание, что then выполнится сразу
путаница между Promise и setTimeout
неверные предположения о порядке логов
При смешивании Promise и синхронного кода всегда сначала выполняется синхронная часть, затем microtasks. Понимание этого порядка критично для корректной асинхронной логики.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию