Вопрос проверяет понимание приоритетов 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 нужно использовать осознанно.