Что такое микрозадача?
Асинхронность и Event Loop
Микрозадача (microtask) — это коллбэк из очереди высокого приоритета, которую Event Loop опустошает полностью сразу после текущей синхронной задачи и перед следующей макрозадачей.
Источники микрозадач
Promise.then / catch / finally.await(продолжение async-функции).queueMicrotask().- Коллбэки
MutationObserver.
Приоритет
После освобождения стека Event Loop выполняет все микрозадачи (включая добавленные по ходу), и только потом берёт одну макрозадачу (setTimeout, событие).
console.log('sync');
setTimeout(() => console.log('macro'), 0);
Promise.resolve().then(() => console.log('micro'));
// sync → micro → macromicro раньше macro, даже при задержке 0.
Микрозадачи против макрозадач
- Микрозадачи — все подряд, до макрозадач и рендера.
- Макрозадачи — по одной за «тик».
Осторожно
Бесконечная генерация микрозадач блокирует рендеринг и макрозадачи — страница «зависнет».
Коротко для собеседования
Микрозадача (Promise, await, queueMicrotask, MutationObserver) — коллбэк из приоритетной очереди, которая опустошается целиком после текущего кода и раньше макрозадач. Поэтому Promise.then срабатывает раньше setTimeout(…, 0).