Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Войти

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

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

© 2026 YeaHub

Документы

Медиа

Назад
Вопрос про JavaScript: microtask, queue

Что произойдет, если очередь microtask будет заполняться бесконечно?

Вопрос проверяет понимание приоритетов Event Loop и их влияния на производительность и UI.

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

Если очередь microtask постоянно пополняется, Event Loop не перейдёт к macrotask.
В результате UI не будет перерисовываться.
Приложение может «зависнуть» без явных ошибок.
Это называется starvation macrotask.

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

Microtask имеют абсолютный приоритет в рамках одной итерации Event Loop.

Как работает проблема

Алгоритм Event Loop устроен так:

  • выполняется синхронный код

  • выполняются все microtask

  • только потом выполняется macrotask

Если каждая microtask добавляет новую microtask:

function loop() {
  Promise.resolve().then(loop);
}
loop();

Что происходит в этом случае

В результате:

  • очередь microtask никогда не опустеет

  • macrotask не начнут выполняться

  • отрисовка UI не произойдёт

  • браузер станет неотзывчивым

Почему это опасно

Такая ситуация:

  • трудно отлаживается

  • не вызывает ошибок

  • выглядит как «заморозка» страницы

Как избежать

На практике:

  • не создают рекурсивные microtask

  • используют setTimeout для разрыва цикла

  • следят за логикой Promise.then

Краткий вывод

Бесконечные microtask могут полностью заблокировать приложение. Приоритет microtask нужно использовать осознанно.

Уровень

  • Рейтинг:

    4

  • Сложность:

    8

Навыки

  • JavaScript

    JavaScript

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

#microtask

#queue

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