Поиск по сайту
Ctrl + K
Вопросы по JS

Состояния Promise в JavaScript

Promise в JavaScript — это объект, который представляет собой результат асинхронной операции, которая может быть выполнена в будущем. Он может находиться в одном из трёх состояний:

  • Pending (ожидание): начальное состояние Promise, пока операция не завершена.
  • Fulfilled (выполнено): состояние, когда операция завершена успешно, и результат доступен.
  • Rejected (отклонено): состояние, когда операция завершена с ошибкой, и причина отклонения предоставлена.
  • 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().