Стани проміса
У проміса є три стани
| Стан | Назва | Що означає |
|---|---|---|
pending | Очікування | Асинхронна операція ще не завершена. Проміс "у процесі". |
fulfilled | Виконано (успішно) | Операція завершилась успішно, викликано resolve(value). |
rejected | Відхилено (з помилкою) | Операція завершилась з помилкою, викликано reject(reason) або кинуто виняток. |
Стан pending (очікування)
Проміс створюється в цьому стані типово.
const promise = new Promise(() => {
// поки нічого не викликано → pending
});Він не має результату і чекає, поки буде викликано resolve() або reject().
Стан fulfilled (виконано успішно)
Проміс стає виконаним, коли викликається resolve(value).
const promise = new Promise((resolve) => {
resolve('Успішно!');
});Тепер у нього є результат, який можна обробити в .then():
promise.then(value => console.log(value)); // Успішно!Стан rejected (виконано з помилкою)
Проміс стає відхиленим, коли викликається reject(reason)
або в тілі проміса кидається помилка (throw).
const promise = new Promise((resolve, reject) => {
reject('Помилка мережі');
});Помилку можна перехопити через .catch():
promise.catch(error => console.log(error)); // Помилка мережіВажливо: перехід лише один раз
Після переходу в fulfilled або rejected
проміс стає завершеним (settled) - і його стан вже не можна змінити.
const promise = new Promise((resolve, reject) => {
resolve('OK');
reject('Помилка'); // проігноровано
});Проміс "зафіксувався" у fulfilled і вже не змінить стан.
Додаткове поняття: "settled"
"Settled" (завершений) - це загальний стан, коли проміс уже не pending, тобто:
- або
fulfilled, - або
rejected.
Усі завершені проміси називаються settled, але не всі settled - "успішні".
Візуальна схема переходів
(створення)
│
▼
pending
/ \
/ \
(resolve) ▼ ▼ (reject)
fulfilled rejectedПриклад із затримкою
const promise = new Promise((resolve, reject) => {
console.log('pending...');
setTimeout(() => resolve('done'), 2000);
});
promise
.then(res => console.log(res))
.catch(err => console.error(err));Послідовність:
pending...
doneПідсумок
| Стан | Що означає | Як переходить | Що обробляє |
|---|---|---|---|
pending | Очікування результату | - | - |
fulfilled | Операція виконана успішно | resolve(value) | .then() |
rejected | Помилка під час виконання | reject(error) / throw | .catch() |
settled | Проміс завершено (fulfilled або rejected) | - | .finally() |
Коротка відповідь
Для співбесідиКоротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.