Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Войти

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

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

© 2026 YeaHub

Документы

Медиа

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

В каком порядке выполняются then, catch и finally у Promise

then вызывается при успешном выполнении Promise, catch — при ошибке, а finally — всегда, независимо от результата. finally выполняется после then или catch, но не меняет значение, если сам не выбрасывает ошибку. Все эти колбэки выполняются как микротаски. Порядок строго следует цепочке.

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

then вызывается при успешном выполнении Promise, catch — при ошибке, а finally — всегда, независимо от результата. finally выполняется после then или catch, но не меняет значение, если сам не выбрасывает ошибку. Все эти колбэки выполняются как микротаски. Порядок строго следует цепочке.

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

Базовый порядок выполнения

Promise проходит одно из состояний:

  1. fulfilled → вызываются then

  2. rejected → вызываются catch

  3. После этого всегда выполняется finally

Пример успешного выполнения

Promise.resolve(1)
  .then(v => {
    console.log('then', v);
    return v + 1;
  })
  .finally(() => {
    console.log('finally');
  });

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

  1. then 1

  2. finally

Пример с ошибкой

Promise.reject('err')
  .then(() => {
    console.log('then');
  })
  .catch(e => {
    console.log('catch', e);
  })
  .finally(() => {
    console.log('finally');
  });

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

  1. catch err

  2. finally

Важный нюанс про finally

  1. finally не получает результат

  2. finally не изменяет цепочку, если:

    • не возвращает Promise

    • не выбрасывает ошибку

Promise.resolve(1)
  .finally(() => 100)
  .then(v => console.log(v)); // 1

Вывод

then и catch обрабатывают результат или ошибку, а finally — это место для очистки ресурсов. Он выполняется всегда и не влияет на данные, если не делает этого явно.

Уровень

  • Рейтинг:

    5

  • Сложность:

    8

Навыки

  • JavaScript

    JavaScript

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

#promise

#then

#catch

#finally

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