Назад к вопросам
Middle
204
questionbank
В чем заключается разница между обычными задачами и микрозадачами?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Обычные задачи (macrotasks) выполняются после завершения текущего макроцикла Event Loop. Микрозадачи (microtasks) выполняются после завершения текущей функции, но до старта следующего макроцикла.
К обычным задачам относятся: скрипты, таймеры (setTimeout, setInterval), операции ввода/вывода.
К микрозадачам относятся: промисы (.then(), .catch(), .finally()), process.nextTick(), queueMicrotask(), MutationObserver (в браузерах).
Пример порядка выполнения:
console.log('Start'); // Обычная задача 1 (изначальный скрипт)
setTimeout(() => {
console.log('setTimeout'); // Обычная задача 2
}, 0);
Promise.resolve()
.then(() => {
console.log('Promise 1'); // Микрозадача 1
})
.then(() => {
console.log('Promise 2'); // Микрозадача 2
});
process.nextTick(() => {
console.log('nextTick'); // Микрозадача 3 (выполняется раньше промисов)
});
console.log('End'); // Обычная задача 1 (продолжение скрипта)
Порядок вывода:
Start
End
nextTick
Promise 1
Promise 2
setTimeout
Основные отличия:
| Характеристика | Обычные задачи (Macrotasks) | Микрозадачи (Microtasks) |
|---|---|---|
| Очередь выполнения | Выполняются после всех микрозадач текущего цикла. | Выполняются после текущей операции, но до следующей обычной задачи. |
| Источники | setTimeout, setInterval, I/O, UI-рендеринг. |
Promise.then, process.nextTick, queueMicrotask. |
| Приоритет | Ниже | Выше |