Вопрос проверяет понимание event loop и порядка выполнения асинхронного кода.
Задачи попадают в очередь microtask после выполнения Promise, queueMicrotask или MutationObserver. Они выполняются сразу после завершения текущего стека вызовов и перед следующей macrotask. Поэтому microtask имеют более высокий приоритет. Это влияет на порядок выполнения кода и отрисовку.
Microtask — часть механизма event loop, который определяет порядок выполнения асинхронного кода.
Microtask добавляются при:
Выполнении Promise.then, catch, finally.
Вызове queueMicrotask.
Использовании MutationObserver.
Пример:
Promise.resolve().then(() => {
console.log("microtask");
});
Определение: Microtask queue — очередь задач, которая выполняется сразу после завершения текущего стека вызовов, но до следующей macrotask.
Порядок:
Выполняется текущий код.
Выполняются все microtask.
Затем следующая macrotask.
Macrotask:
setTimeout
setInterval
события DOM
Microtask:
Promise
queueMicrotask
Пример:
setTimeout(() => console.log("macrotask"));
Promise.resolve().then(() => console.log("microtask"));
Результат:
microtask
macrotask
Microtask могут выполняться перед отрисовкой.
Большое количество microtask может задержать repaint.
Это влияет на производительность.
Вывод: microtask добавляются при работе Promise и подобных механизмов и выполняются сразу после текущего кода, раньше macrotask.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию