Назад к вопросам
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.
Приоритет Ниже Выше