Back to questions
Middle
260
questionbank
В чем заключается разница между обычными задачами и микрозадачами?
Sobes Copilot
Get answers in real time
Answer from AI
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. |
| Приоритет | Ниже | Выше |