PassFront
  1. PassFront
  2. База знаний
  3. Асинхронность и Event Loop

Чем отличаются состояния Promise и какие переходы между ними возможны?

Асинхронность и Event Loop

У промиса три состояния и строго ограниченные переходы между ними. Состояние меняется ровно один раз и необратимо.

Состояния

  • pending (ожидание) — начальное, результата ещё нет.
  • fulfilled (выполнен) — операция успешна, есть значение.
  • rejected (отклонён) — операция завершилась ошибкой.

Возможные переходы

  • pending → fulfilled — через resolve(value).
  • pending → rejected — через reject(error) или throw в исполнителе.

Обратных переходов нет: fulfilled и rejected — это settled (завершённые) состояния, они финальны.

const p = new Promise((resolve, reject) => {
  resolve('ok');
  reject('уже поздно'); // игнорируется — переход уже был
});

Термины

  • settled — промис завершён (fulfilled или rejected).
  • resolved — промис «зафиксирован»: либо settled, либо привязан к другому промису и повторить нельзя.

Как читают состояние

Напрямую состояние не доступно — на него реагируют:

  • then(onFulfilled) — на fulfilled.
  • catch(onRejected) — на rejected.
  • finally(fn) — на любое settled.

Коротко для собеседования

Состояния: pending → fulfilled или pending → rejected, один раз и необратимо. Завершённое состояние называют settled. Первый вызов resolve/reject фиксирует результат, остальные игнорируются.

Другие вопросы раздела