> Каков порядок выполнения кода с setTimeout, Promise и цепочкой then/catch в JavaScript? (JavaScript)

Уровень: middle · Роль: frontend · Категория: Технические вопросы

Компании: VK, Exness

Стек: JavaScript

> Пример ответа

В JavaScript существует чёткий порядок выполнения асинхронных операций, основанный на цикле событий (Event Loop). Код с setTimeout, Promise и цепочками then/catch выполняется в следующей последовательности:

  1. Синхронный код выполняется первым - весь код вне колбэков и промисов.

  2. Микрозадачи (microtasks) - это Promise.then/catch/finally, queueMicrotask, MutationObserver. Они выполняются сразу после завершения текущего синхронного кода, до макрозадач.

  3. Макрозадачи (macrotasks) - это setTimeout, setInterval, setImmediate, I/O, UI rendering. Они выполняются после того, как все микрозадачи обработаны.

Пример:

JAVASCRIPT
console.log('1'); // синхронно
setTimeout(() => console.log('2'), 0); // макрозадача
Promise.resolve()
.then(() => console.log('3')) // микрозадача
.then(() => console.log('4')); // микрозадача
console.log('5'); // синхронно

Вывод: 1, 5, 3, 4, 2.

Объяснение:

  • Сначала выводятся 1 и 5 (синхронный код).

  • Затем выполняются все микрозадачи: 3 и 4 (два then).

  • После этого - макрозадача setTimeout, выводящая 2.

Если в цепочке then возникает ошибка, она обрабатывается в catch, который также является микрозадачей и выполняется до следующей макрозадачи.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью