Запропонувати правкуПокращити цю статтюДопрацюйте відповідь до «Стани проміса». Ваші зміни проходять модерацію перед публікацією.Потрібне підтвердженняКонтентЩо ви змінюєте🇺🇸EN🇺🇦UAПереглядЗаголовок (UA)Коротка відповідь (UA)У **проміса** є три стани: `pending` (очікування), `fulfilled` (виконано успішно) і `rejected` (відхилено з помилкою). **Ключове:** після переходу у `fulfilled` або `rejected` проміс стає завершеним (settled), і його стан вже не можна змінити.Показується над повною відповіддю для швидкого нагадування.Відповідь (UA)Зображення## У проміса є три стани | Стан | Назва | Що означає | | --- | --- | --- | | `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()` |Для рев’юераПримітка для модератора (необов’язково)Бачить лише модератор. Прискорює рев’ю.