Состояния Promise в JavaScript
Promise в JavaScript — это объект, который представляет собой результат асинхронной операции, которая может быть выполнена в будущем. Он может находиться в одном из трёх состояний:
1. Pending (ожидание)
Когда Promise только создается, он находится в состоянии pending (ожидание). Это значит, что асинхронная операция ещё не завершена, и результат (или ошибка) ещё не доступен.
let promise = new Promise((resolve, reject) => {
// Операция ещё не завершена
});
В этом состоянии можно ожидать завершения операции, которая либо приведет к успешному результату (fulfilled), либо к ошибке (rejected).
2. Fulfilled (выполнено)
Когда операция завершается успешно, Promise переходит в состояние fulfilled. В этот момент он возвращает результат выполнения, который можно получить с помощью метода .then()
.
let promise = new Promise((resolve, reject) => {
let success = true;
if (success) {
resolve("Операция выполнена успешно!"); // Переходит в состояние fulfilled
} else {
reject("Операция не удалась");
}
});
promise.then(result => {
console.log(result); // "Операция выполнена успешно!"
});
В состоянии fulfilled Promise предоставляет результат выполнения асинхронной операции.
3. Rejected (отклонено)
Если операция завершается с ошибкой или по другой причине неудачи, Promise переходит в состояние rejected. Это означает, что операция не была успешной, и причина ошибки доступна для обработки с помощью метода .catch()
.
let promise = new Promise((resolve, reject) => {
let success = false;
if (success) {
resolve("Операция выполнена успешно");
} else {
reject("Операция не удалась"); // Переходит в состояние rejected
}
});
promise.catch(error => {
console.log(error); // "Операция не удалась"
});
В состоянии rejected Promise предоставляет причину ошибки, с которой можно работать в блоке .catch()
.
Заключение
Promise всегда начинает в состоянии pending. Затем, в зависимости от результатов асинхронной операции, он либо переходит в состояние fulfilled (если операция выполнена успешно), либо в состояние rejected (если операция завершилась ошибкой).
Это позволяет легко и понятно работать с асинхронным кодом, управляя результатами и ошибками с помощью методов .then()
и .catch()
.