Вопрос проверяет понимание принципов работы с асинхронным кодом в JavaScript, в частности, как обрабатываются промисы и микрозадачи в Event Loop.
Этот вопрос демонстрирует ключевой механизм работы асинхронного JavaScript — Event Loop и приоритетность выполнения задач. Понимание этого необходимо для предсказания порядка выполнения кода, особенно при работе с промисами, async/await и другими асинхронными операциями.
JavaScript имеет однопоточную модель выполнения, но использует Event Loop для обработки асинхронных операций без блокировки основного потока. Event Loop управляет двумя основными очередями: очередью задач (macrotask queue) и очередью микрозадач (microtask queue). К макрозадачам относятся, например, setTimeout, setInterval, I/O-операции. К микрозадачам — обработчики промисов (.then, .catch, .finally) и queueMicrotask.
Основное правило: после выполнения каждой макрозадачи Event Loop сначала полностью очищает всю очередь микрозадач, прежде чем взять следующую макрозадачу. Это обеспечивает высокий приоритет для промисов.
Рассмотрим исходный код:
console.log('1');
Promise.resolve()
.then(() => console.log('2'));
console.log('3');console.log('1') выводит '1'.Promise.resolve(). Метод .then(() => console.log('2')) регистрирует колбэк в очереди микрозадач, но не выполняет его сразу.console.log('3') выводит '3'. На этом текущее макрозадание (изначальный скрипт) завершается.console.log('2') выводит '2'.Таким образом, порядок вывода: '1', '3', '2'.
Понимание этого порядка критично для:
queueMicrotask).Вывод: Этот пример наглядно показывает приоритет микрозадач (обработчиков промисов) над макрозадачами. Знание этого механизма помогает писать предсказуемый асинхронный код и является фундаментальным для любого JavaScript-разработчика.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию