Обычные задачи (macrotasks) выполняются после завершения текущего макроцикла Event Loop. Микрозадачи (microtasks) выполняются после завершения текущей функции, но до старта следующего макроцикла.
К обычным задачам относятся: скрипты, таймеры (setTimeout, setInterval), операции ввода/вывода.
К микрозадачам относятся: промисы (.then(), .catch(), .finally()), process.nextTick(), queueMicrotask(), MutationObserver (в браузерах).
Пример порядка выполнения:
javascript
Порядок вывода:
plaintext
Основные отличия:
| Характеристика | Обычные задачи (Macrotasks) | Микрозадачи (Microtasks) |
|---|---|---|
| Очередь выполнения | Выполняются после всех микрозадач текущего цикла. | Выполняются после текущей операции, но до следующей обычной задачи. |
| Источники | setTimeout, setInterval, I/O, UI-рендеринг. | Promise.then, process.nextTick, queueMicrotask. |
| Приоритет | Ниже | Выше |