> Как предсказать вывод консольных логов при выполнении асинхронного кода в JavaScript (JavaScript)

Уровень: senior · Роль: frontend · Категория: Технические вопросы

Компании: amoCRM

Стек: JavaScript

> Пример ответа

Для предсказания вывода консольных логов в асинхронном JavaScript нужно понимать порядок выполнения: синхронный код выполняется первым, затем микрозадачи (Promise, queueMicrotask), потом макрозадачи (setTimeout, setInterval, I/O). Рассмотрим пример:

JAVASCRIPT
console.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) или мысленно разбивайте на фазы.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью