Sobes.tech
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.
Приоритет Ниже Выше