PassFront
  1. PassFront
  2. База знаний
  3. Асинхронность и Event Loop

Какие задачи обрабатываются в Event Loop?

Асинхронность и Event Loop

В Event Loop обрабатываются задачи двух очередей: микрозадачи (Promise, queueMicrotask, await) и макрозадачи (setTimeout, события, I/O) — плюс между ними браузер выполняет рендеринг.

Что попадает в очереди

Микрозадачи

  • Коллбэки Promise.then/catch/finally.
  • queueMicrotask.
  • await (продолжение async-функции).
  • MutationObserver.

Макрозадачи

  • setTimeout, setInterval.
  • Обработчики DOM-событий.
  • Сетевые коллбэки, I/O.
  • setImmediate (Node), MessageChannel.

Порядок обработки

1. Выполнить синхронный код (стек).
2. Опустошить ВСЮ очередь микрозадач.
3. (Рендеринг при необходимости.)
4. Взять ОДНУ макрозадачу.
5. Повторить с шага 2.
console.log('sync');
setTimeout(() => console.log('macro'));
Promise.resolve().then(() => console.log('micro'));
// sync → micro → macro

Главное

  • Микрозадачи имеют приоритет: выполняются все сразу, до макрозадач и рендера.
  • Макрозадачи — по одной за цикл.

Коротко для собеседования

Event Loop обрабатывает микрозадачи (Promise, await, queueMicrotask) — все сразу и с приоритетом, и макрозадачи (setTimeout, события, I/O) — по одной. Между ними — рендеринг. Поэтому Promise.then выполняется раньше setTimeout.

Другие вопросы раздела