Sobes.tech
Junior
225
questionbank

Что такое Promise в JavaScript?

Ответ от нейросети

sobes.tech AI

Promise — это объект, представляющий собой конечное завершение (или неудачу) асинхронной операции и ее результирующее значение. Promise находится в одном из трех состояний: ожидание (pending), выполнение (fulfilled) или отклонение (rejected). Он позволяет избежать "ада колбэков" и делает асинхронный код более читаемым и управляемым.

Основные методы Promise:

  • .then(): Обрабатывает успешное выполнение Promise и возвращает новый Promise. Принимает функцию-обработчик для успешного результата.
  • .catch(): Обрабатывает отклонение Promise и возвращает новый Promise. Принимает функцию-обработчик для ошибки. Является синтаксическим сахаром для .then(null, rejectionHandler).
  • .finally(): Выполняет функцию независимо от результата Promise (успех или ошибка). Удобен для очистки ресурсов.
  • Promise.all(iterable): Возвращает новый Promise, который выполняется, когда выполняются все Promise в переданном итерируемом объекте. Отклоняется, если хотя бы один из Promise отклоняется.
  • Promise.race(iterable): Возвращает новый Promise, который выполняется или отклоняется, как только выполняется или отклоняется любой из Promise в переданном итерируемом объекте.
  • Promise.resolve(value): Возвращает Promise, который выполняется с указанным значением.
  • Promise.reject(reason): Возвращает Promise, который отклоняется с указанной причиной.

Пример использования:

// Создание нового Promise
const myPromise = new Promise((resolve, reject) => {
  const success = true; // Имитация успешной или неуспешной операции

  if (success) {
    setTimeout(() => {
      resolve("Операция выполнена успешно!"); // Вызываем resolve при успехе
    }, 1000);
  } else {
    setTimeout(() => {
      reject("Операция завершилась с ошибкой!"); // Вызываем reject при ошибке
    }, 1000);
  }
});

// Использование Promise
myPromise
  .then((result) => {
    // Этот блок выполнится при успешном выполнении Promise
    console.log(result);
    return "Обработано!"; // Возвращаем значение для следующего .then
  })
  .then((nextResult) => {
    // Этот блок выполнится после предыдущего .then
    console.log(nextResult);
  })
  .catch((error) => {
    // Этот блок выполнится при отклонении Promise
    console.error(error);
  })
  .finally(() => {
    // Этот блок выполнится всегда, независимо от результата
    console.log("Promise завершен.");
  });