Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

Документы

Медиа

Назад
Вопрос про JavaScript: event, loop, promise, settimeout

Как выполняется Promise, если его вызов обёрнут в setTimeout?

Вопрос нужен, чтобы оценить, понимает ли кандидат различие между Promise и setTimeout и их место в очередях задач.

Короткий ответ

setTimeout помещает колбэк в очередь макрозадач. Promise внутри него создаётся и резолвится уже во время выполнения этой макрозадачи. Микрозадачи Promise будут выполнены сразу после завершения текущего колбэка setTimeout, но до следующей макрозадачи. Это влияет на порядок выполнения кода.

Длинный ответ

Асинхронность в JavaScript основана на очередях задач, и setTimeout с Promise задействуют разные уровни этой системы.

Очереди задач в браузере

Перед разбором примера важно понимать:

  • setTimeout → макрозадача

  • Promise.then / await → микрозадача

Микрозадачи всегда выполняются раньше следующей макрозадачи.

Порядок выполнения

setTimeout(() => {
  Promise.resolve().then(() => {
    console.log('promise')
  })
}, 0)

console.log('sync')

Последовательность:

  1. Выполняется синхронный код

  2. Колбэк setTimeout попадает в очередь макрозадач

  3. После его выполнения добавляется микрозадача Promise

  4. Микрозадача выполняется до следующей макрозадачи

Практические последствия

  • Promise внутри setTimeout не «обгоняет» синхронный код

  • Но он выполняется раньше других таймеров

  • Это важно при оптимизации и дебаге асинхронного кода

Краткий вывод

Promise, созданный внутри setTimeout, выполняется в рамках макрозадачи таймера, а его обработчики — как микрозадачи сразу после неё. Понимание этого порядка критично для предсказуемого асинхронного поведения.

Уровень

  • Рейтинг:

    5

  • Сложность:

    5

Навыки

  • JavaScript

    JavaScript

Ключевые слова

#event

#loop

#promise

#settimeout

Подпишись на React Developer в телеграм