Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Войти

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

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

© 2026 YeaHub

Документы

Медиа

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

В каком порядке выполняются setTimeout и Promise.then?

Вопрос проверяет понимание приоритета microtasks над macrotasks.

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

Promise.then всегда выполняется раньше, чем setTimeout, даже если таймер имеет задержку 0. Это происходит потому, что then попадает в очередь microtasks, а setTimeout — в очередь macrotasks. После завершения синхронного кода event loop сначала очищает очередь microtasks, и только потом берёт следующую macrotask.

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

Этот вопрос — частный случай работы event loop, но его часто задают на собеседованиях.

Определение

Promise.then — microtask
setTimeout — macrotask

Пример

setTimeout(() => {
  console.log("timeout");
}, 0);

Promise.resolve().then(() => {
  console.log("promise");
});

Результат

promise
timeout

Более сложный пример

setTimeout(() => {
  console.log("timeout");
  Promise.resolve().then(() => console.log("promise in timeout"));
}, 0);

Promise.resolve().then(() => {
  console.log("promise");
});

Порядок:

  1. Синхронный код завершился.

  2. Выполнился promise.

  3. Выполнился timeout.

  4. Выполнился promise in timeout.

Вывод

Promise.then имеет приоритет над setTimeout, потому что microtasks выполняются раньше macrotasks.

Уровень

  • Рейтинг:

    5

  • Сложность:

    6

Навыки

  • JavaScript

    JavaScript

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

#promise

#then

#settimeout

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