> Как предсказать вывод консольных логов при выполнении асинхронного кода в JavaScript (JavaScript)
Уровень: senior · Роль: frontend · Категория: Технические вопросы
Компании: amoCRM
Стек: JavaScript
> Пример ответа
Для предсказания вывода консольных логов в асинхронном JavaScript нужно понимать порядок выполнения: синхронный код выполняется первым, затем микрозадачи (Promise, queueMicrotask), потом макрозадачи (setTimeout, setInterval, I/O). Рассмотрим пример:
JAVASCRIPTconsole.log('1'); // синхронноsetTimeout(() => {console.log('2'); // макрозадача}, 0);Promise.resolve().then(() => {console.log('3'); // микрозадача});console.log('4'); // синхронно
Вывод: 1, 4, 3, 2.
Объяснение: сначала выполняются синхронные 1 и 4. Затем, после завершения синхронного кода, в очередь микрозадач попадает 3 (Promise), и она выполняется до макрозадач. Только после этого выполняется 2 из setTimeout.
Ключевые правила:
- Синхронный код всегда в приоритете.
- Микрозадачи (Promise, async/await, MutationObserver) выполняются после каждого макрозадачного цикла.
- Макрозадачи (setTimeout, setInterval, события) - последние.
Для сложных цепочек используйте Event Loop визуализаторы (например, loupe) или мысленно разбивайте на фазы.
> Похожие задачи по frontend
Как подписываться на изменения в BehaviorSubject и обрабатывать их
Как использовать BehaviorSubject для хранения и обработки пользовательских значений
Можно ли использовать массив или объект для хранения уникальных значений в JavaScript
Есть ли внутренние механизмы выделения памяти при добавлении элементов в массив в JavaScript
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью