Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

Документы

Медиа

Назад
Вопрос про JavaScript: event, loop, microtask, macrotask

Какие задачи относятся к microtasks, а какие к macrotasks?

Вопрос проверяет понимание работы event loop, очередей задач и порядка выполнения асинхронного кода.

Короткий ответ

Microtasks — это задачи с более высоким приоритетом, которые выполняются сразу после завершения текущего синхронного кода. К ним относятся Promise.then, catch, finally, queueMicrotask, MutationObserver. Macrotasks — это задачи общего планирования, такие как setTimeout, setInterval, setImmediate, обработчики событий и I/O. Event loop всегда сначала выполняет все microtasks, и только потом берёт следующую macrotask.

Длинный ответ

Чтобы понять разницу между microtasks и macrotasks, важно разобраться, как работает event loop.

Определение

Event loop — механизм JavaScript, который управляет выполнением синхронного и асинхронного кода, используя очередь задач.

Macrotasks (Task queue)

К macrotasks относятся:

  1. setTimeout

  2. setInterval

  3. setImmediate (Node.js)

  4. Обработчики DOM-событий

  5. I/O операции

setTimeout(() => {
  console.log("timeout");
}, 0);

Microtasks (Microtask queue)

К microtasks относятся:

  1. Promise.then / catch / finally

  2. queueMicrotask

  3. MutationObserver

Promise.resolve().then(() => {
  console.log("promise");
});

Порядок выполнения

  1. Выполняется весь синхронный код.

  2. Выполняются все microtasks.

  3. Выполняется одна macrotask.

  4. Снова выполняются все microtasks.

  5. Цикл повторяется.

Пример

console.log("start");

setTimeout(() => console.log("timeout"));

Promise.resolve().then(() => console.log("promise"));

console.log("end");

Результат:

start
end
promise
timeout

Почему microtasks важны

  1. Они гарантируют предсказуемое завершение асинхронных цепочек.

  2. Позволяют Promise выполняться раньше таймеров.

  3. Используются внутри async/await.

Вывод

Microtasks имеют более высокий приоритет и всегда выполняются перед macrotasks, что критично для понимания порядка выполнения асинхронного JavaScript-кода.

Уровень

  • Рейтинг:

    5

  • Сложность:

    7

Навыки

  • JavaScript

    JavaScript

Ключевые слова

#event

#loop

#microtask

#macrotask

Подпишись на React Developer в телеграм