Ответ
Promise может находиться в одном из трёх состояний:
- Pending — начальное состояние, промис ещё не выполнен и не отклонён.
- Fulfilled — промис успешно завершён с результатом (вызван
resolve). - 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, он же "обещание", а по жизни — источник вечного ожидания и неопределённости, прямо как в пятницу вечером: "встретимся в баре", а он либо придёт, либо нахуй сольётся.
Так вот, у этого самого промиса всего три возможных состояния, и он в них застревает, как муха в смоле.
- Pending (Ожидание). Это когда промис только создали, а он нихуя не сделал. Висит в воздухе, как предчувствие пиздеца. Ни "да", ни "нет". Просто ждёт, сволочь.
- Fulfilled (Исполнено). О, ебать! Вот это поворот! Всё удалось, задача выполнена,
resolveвызвали. Промис счастлив, доволен, и у него есть результат. Как будто тебе наконец-то прислали долг. - 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. Как сама жизнь, только в коде.