Чим resolve відрізняється від reject?
Коротк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, і змінити його вже не можна | - | - | - |
Коротка відповідь
Для співбесідиPremium
Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.