Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Войти

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

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

© 2026 YeaHub

Документы

Медиа

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

Почему then и finally выполняются после синхронного кода?

Вопрос проверяет понимание event loop и различия между синхронным кодом и микрозадачами.

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

then и finally выполняются после синхронного кода, потому что они ставятся в очередь микрозадач. JavaScript сначала выполняет весь синхронный код в текущем стеке вызовов. Только после этого event loop начинает обрабатывать микрозадачи. Поэтому обработчики промисов всегда выполняются “чуть позже”.

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

Чтобы понять это поведение, нужно разобрать модель выполнения JavaScript.

Определение

Определение: Event loop — механизм, который управляет выполнением синхронного кода, микрозадач и макрозадач.

Как выполняется код

JavaScript следует строгому порядку:

  1. Выполняется весь синхронный код (call stack).

  2. Затем выполняются все микрозадачи.

  3. Потом берётся следующая макрозадача.

Где находятся then и finally

  • Promise.then

  • Promise.catch

  • Promise.finally

Все они добавляются в очередь microtask queue.

Пример

console.log('start');

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

console.log('end');

Порядок вывода:

start
end
then

Почему это важно

  • объясняет “неожиданный” порядок console.log

  • помогает отлаживать асинхронный код

  • критично для React, где много промисов и эффектов

Частая ошибка

Ожидание, что then выполнится “сразу после resolve” внутри того же синхронного блока.

Вывод: then и finally выполняются после синхронного кода, потому что они обрабатываются как микрозадачи и запускаются event loop только после очистки текущего стека вызовов.

Уровень

  • Рейтинг:

    5

  • Сложность:

    8

Навыки

  • JavaScript

    JavaScript

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

#promise

#microtask

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