Какие знаешь состояния Promise

Ответ

Promise может находиться в одном из трёх состояний:

  1. Pending — начальное состояние, промис ещё не выполнен и не отклонён.
  2. Fulfilled — промис успешно завершён с результатом (вызван resolve).
  3. Rejected — промис завершился с ошибкой (вызван reject).

Пример:

const promise = new Promise((resolve, reject) => {
  setTimeout(() => resolve('Успех!'), 1000); // Fulfilled
  // или reject('Ошибка!'); → Rejected
});

promise
  .then(result => console.log(result)) // Успех!
  .catch(error => console.error(error)); // Ошибка!

После перехода в fulfilled или rejected состояние промиса неизменно.

Ответ 18+ 🔞

Давай разберём эту штуку, которая у всех на слуху, а понимают её как хуй пойми что. Promise, он же "обещание", а по жизни — источник вечного ожидания и неопределённости, прямо как в пятницу вечером: "встретимся в баре", а он либо придёт, либо нахуй сольётся.

Так вот, у этого самого промиса всего три возможных состояния, и он в них застревает, как муха в смоле.

  1. Pending (Ожидание). Это когда промис только создали, а он нихуя не сделал. Висит в воздухе, как предчувствие пиздеца. Ни "да", ни "нет". Просто ждёт, сволочь.
  2. Fulfilled (Исполнено). О, ебать! Вот это поворот! Всё удалось, задача выполнена, resolve вызвали. Промис счастлив, доволен, и у него есть результат. Как будто тебе наконец-то прислали долг.
  3. Rejected (Отклонено). Ну всё, пизда. Что-то пошло не так, вызвали reject. Промис сломался, ошибку выдал. Реальность накрыла его, как медный таз. Как попытка заказать еду в три ночи — курьер уже не приедет.

И главная фишка, блядь, в чём: перешёл промис в состояние 2 или 3 — всё, пиши пропало. Назад дороги нет. Из "исполнено" в "отклонено" не скакнёшь, и наоборот. Закостенел, сука, навеки.

Пример, чтобы вообще всё стало ясно, как божий день:

const promise = new Promise((resolve, reject) => {
  // Делаем вид, что усердно работаем секунду
  setTimeout(() => resolve('Успех!'), 1000); // Через секунду — Fulfilled!
  // А могли бы и reject('Ошибка!'); → тогда бы Rejected, пиздец и тоска.
});

// А дальше ловим этот результат
promise
  .then(result => console.log(result)) // Поймали "Успех!" — красота!
  .catch(error => console.error(error)); // Или вот тут поймали бы ошибку, если бы reject.

Вот и вся магия, ёпта. Создаёшь, ждёшь, а потом либо радуешься, либо материшься в catch. Как сама жизнь, только в коде.