> Каков порядок выполнения кода с setTimeout, Promise и цепочкой then/catch в JavaScript? (JavaScript)
Уровень: middle · Роль: frontend · Категория: Технические вопросы
Компании: VK, Exness
Стек: JavaScript
> Пример ответа
В JavaScript существует чёткий порядок выполнения асинхронных операций, основанный на цикле событий (Event Loop). Код с setTimeout, Promise и цепочками then/catch выполняется в следующей последовательности:
-
Синхронный код выполняется первым - весь код вне колбэков и промисов.
-
Микрозадачи (microtasks) - это
Promise.then/catch/finally,queueMicrotask,MutationObserver. Они выполняются сразу после завершения текущего синхронного кода, до макрозадач. -
Макрозадачи (macrotasks) - это
setTimeout,setInterval,setImmediate, I/O, UI rendering. Они выполняются после того, как все микрозадачи обработаны.
Пример:
JAVASCRIPTconsole.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, который также является микрозадачей и выполняется до следующей макрозадачи.
> Похожие задачи по frontend
Что такое fetch в JavaScript
Как оптимизировать обработку кликов на ячейки большой таблицы в веб-приложении
В какой момент вызывается callback в конструкторе Promise в JavaScript
Можно ли использовать цикл for...of для перебора ключей объекта в JavaScript?
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью