Какие задачи обрабатываются в 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.