Запропонувати правкуПокращити цю статтюДопрацюйте відповідь до «Чим resolve відрізняється від reject?». Ваші зміни проходять модерацію перед публікацією.Потрібне підтвердженняКонтентЩо ви змінюєте🇺🇸EN🇺🇦UAПереглядЗаголовок (UA)Коротка відповідь (UA)`resolve(value)` повідомляє, що операція **успішно завершилась**, і проміс стає **fulfilled** (виконаним), а `reject(reason)` повідомляє, що операція **завершилась з помилкою**, і проміс стає **rejected** (відхиленим). **Ключове:** обидва переводять проміс зі стану `pending` в остаточний (settled), але в різні "гілки" результату.Показується над повною відповіддю для швидкого нагадування.Відповідь (UA)Зображення## Короткa відповідь - `resolve(value)` - повідомляє, що операція **успішно завершилась** → проміс стає **fulfilled** (виконаним). - `reject(reason)` - повідомляє, що операція **завершилась з помилкою** → проміс стає **rejected** (відхиленим). Обидва переводять проміс зі стану `pending` → у **остаточний (settled)**, але в різні "гілки" результату. ## Приклад ```javascript const promise = new Promise((resolve, reject) => { const success = Math.random() > 0.5; if (success) { resolve('Все пройшло успішно'); } else { reject('Сталася помилка'); } }); promise .then(result => console.log('then:', result)) .catch(error => console.log('catch:', error)) .finally(() => console.log('finally')); ``` Можливий вивід: ```javascript then: Все пройшло успішно finally ``` або ```javascript catch: Сталася помилка finally ``` ## Як вони працюють | Метод | Що робить | Стан промісу | Що викличе | |---|---|---|---| | `resolve(value)` | Завершує проміс успішно, передає значення `value` | **fulfilled** | `.then(value => …)` | | `reject(reason)` | Завершує проміс з помилкою, передає `reason` | **rejected** | `.catch(error => …)` | Після виклику одного з них: - проміс "фіксується" (settled), - повторний виклик `resolve` або `reject` буде проігноровано. ## Приклад: resolve ```javascript const promise = new Promise((resolve) => { setTimeout(() => { resolve('Дані отримано!'); }, 1000); }); promise.then(result => console.log(result)); ``` Через 1 секунду: ```javascript Дані отримано! ``` Проміс перейшов у стан **fulfilled**. ## Приклад: reject ```javascript const promise = new Promise((resolve, reject) => { setTimeout(() => { reject('Помилка мережі'); }, 1000); }); promise.catch(error => console.error(error)); ``` Через 1 секунду: ```javascript Помилка мережі ``` Проміс перейшов у стан **rejected**. ## Важливо: змінити стан можна лише один раз ```javascript const promise = new Promise((resolve, reject) => { resolve('OK'); reject('Помилка'); // проігноровано }); promise.then(console.log).catch(console.error); ``` Після першого виклику (`resolve`) проміс став **fulfilled**, і другий виклик (`reject`) не має ефекту. ## Приклад: resolve з іншим промісом Якщо в `resolve()` передати **інший Promise**, поточний проміс **чекатиме** його завершення. ```javascript const inner = new Promise((resolve) => setTimeout(() => resolve('Внутрішній результат'), 1000)); const outer = new Promise((resolve) => resolve(inner)); outer.then(console.log); // виведе "Внутрішній результат" через 1 сек. ``` Це називається **promise unwrapping** - "розгортання" промісів. ## Обробка результатів ```javascript new Promise((resolve, reject) => { resolve('OK'); }).then(console.log); // OK new Promise((resolve, reject) => { reject('Помилка'); }).catch(console.error); // Помилка ``` ## Аналогія > Уяви проміс як доставку: > > - `resolve` → кур'єр привіз посилку (все успішно) > - `reject` → кур'єр зателефонував і сказав: "адресу не знайдено" (помилка) ## ІТОГ | Метод | Стан | Що передає | Обробляється де | Аналогія | |---|---|---|---|---| | `resolve(value)` | fulfilled | Успішний результат | `.then()` | Посилка доставлена | | `reject(reason)` | rejected | Помилка / причина відмови | `.catch()` | Кур'єр не зміг доставити | | Після виклику | Проміс стає `settled`, і змінити його вже не можна | - | - | - |Для рев’юераПримітка для модератора (необов’язково)Бачить лише модератор. Прискорює рев’ю.