Skip to main content

Стани проміса

У проміса є три стани

СтанНазваЩо означає
pendingОчікуванняАсинхронна операція ще не завершена. Проміс "у процесі".
fulfilledВиконано (успішно)Операція завершилась успішно, викликано resolve(value).
rejectedВідхилено (з помилкою)Операція завершилась з помилкою, викликано reject(reason) або кинуто виняток.

Стан pending (очікування)

Проміс створюється в цьому стані типово.

javascript
const promise = new Promise(() => { // поки нічого не викликано → pending });

Він не має результату і чекає, поки буде викликано resolve() або reject().

Стан fulfilled (виконано успішно)

Проміс стає виконаним, коли викликається resolve(value).

javascript
const promise = new Promise((resolve) => { resolve('Успішно!'); });

Тепер у нього є результат, який можна обробити в .then():

javascript
promise.then(value => console.log(value)); // Успішно!

Стан rejected (виконано з помилкою)

Проміс стає відхиленим, коли викликається reject(reason) або в тілі проміса кидається помилка (throw).

javascript
const promise = new Promise((resolve, reject) => { reject('Помилка мережі'); });

Помилку можна перехопити через .catch():

javascript
promise.catch(error => console.log(error)); // Помилка мережі

Важливо: перехід лише один раз

Після переходу в fulfilled або rejected проміс стає завершеним (settled) - і його стан вже не можна змінити.

javascript
const promise = new Promise((resolve, reject) => { resolve('OK'); reject('Помилка'); // проігноровано });

Проміс "зафіксувався" у fulfilled і вже не змінить стан.

Додаткове поняття: "settled"

"Settled" (завершений) - це загальний стан, коли проміс уже не pending, тобто:

  • або fulfilled,
  • або rejected.

Усі завершені проміси називаються settled, але не всі settled - "успішні".

Візуальна схема переходів

javascript
(створення) │ ▼ pending / \ / \ (resolve) ▼ ▼ (reject) fulfilled rejected

Приклад із затримкою

javascript
const promise = new Promise((resolve, reject) => { console.log('pending...'); setTimeout(() => resolve('done'), 2000); }); promise .then(res => console.log(res)) .catch(err => console.error(err));

Послідовність:

javascript
pending... done

Підсумок

СтанЩо означаєЯк переходитьЩо обробляє
pendingОчікування результату--
fulfilledОперація виконана успішноresolve(value).then()
rejectedПомилка під час виконанняreject(error) / throw.catch()
settledПроміс завершено (fulfilled або rejected)-.finally()

Коротка відповідь

Для співбесіди
Premium

Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.