Что такое обещание

Определение MDN — объект Promise представляет возможное завершение (или сбой) асинхронной операции и ее результирующее значение.

Обещание в javascript похоже на обещание в реальной жизни.

  • Обещание в javascript и в реальной жизни — это соглашение, которое устанавливает ожидание того, что что-то будет сделано.
  • Обещание можно либо сдержать, либо нарушить.
  • Когда обещание нарушено, вы ожидаете выяснить, почему обещание не удалось сдержать, чтобы принять меры.
  • Когда обещание сдержано, вы ожидаете получить обещанное.

В чем смысл Promise в Javascript и как это работает

Промисы в основном используются для упрощения обработки асинхронных операций или блокировки кода, например вызовов API и вызовов базы данных.

У обещания в javascript есть три статуса.

  • Ожидание = начальное состояние обещания.
  • Resolved = состояние обещания, представляющее успешную операцию (например, обещание было сохранено.
  • Отклонено = состояние обещания, представляющее неудачную операцию.

Как создать обещание

Ниже приведен синтаксис, необходимый для создания нового промиса.

new Promise(function(resolve, reject) { ... } );

Пример 1

  • В этом примере я создал переменную с именем «TheSecretWasKept» и установил для нее значение true.
  • Затем я создал новое обещание, которое проверяет, был ли сохранен секрет или нет.
var TheSecretWasKept = true;
secret = new Promise(function(resolve, reject) {
  if (TheSecretWasKept) {
    resolve("I can trust this person with my secrets");
  } else {
    reject("I cant trust this person with my secrets. ");
  }
});
console.log(secret);

Пример 1. Результат

  • Как видите, обещание было выполнено, и в консоли оно отображается как «разрешено».
  • В консоли также отображается значение выполненного обещания.

Пример 2

А теперь, поскольку я установил для переменной «TheSecretWasKept» значение false…

var TheSecretWasKept = false;
secret = new Promise(function(resolve, reject) {
  if (TheSecretWasKept) {
    resolve("I can trust this person with my secrets");
  } else {
    reject("I cant trust this person with my secrets. ");
  }
});
console.log(secret);

Пример 2 Результат

… Консоль показывает, что обещание отклонено.

Обещание методов прототипа

  • Методы промисов — это способ связать ваш код в цепочку на основе успеха или неудачи выполнения промиса.
  • Методы будут запущены на основе результата обещания.
  • Это более простой и чистый способ связать ваш код вместе без использования обратных вызовов, которые могут запутаться и привести к аду обратных вызовов.
  • Существует три типа методов прототипирования обещаний.

потом

  • Метод, который оживает, если обещание сдержано.

Поймать

  • Это метод, который оживает, если обещание не выполнено.

наконец-то

  • Это метод, который выполняется независимо от результата.

Пример истории

  • В этом примере обещание было создано с обещанием матери купить телефон для своего сына.
  • Я создал 3 метода прототипа обещания, чтобы реагировать на результаты обещания.
var momsPromise = new Promise(function(resolve, reject) {
  momsSavings = 20000;
  priceOfPhone = 60000;
  if (momsSavings > priceOfPhone) {
    resolve({
      brand: "iphone",
      model: "6s"
    });
  } else {
    reject("We don't have enough savings. Let us save some more money.");
  }
});
momsPromise.then(function(value) {
  console.log("Hurray I got this phone as a gift ", JSON.stringify(value));
});
momsPromise.catch(function(reason) {
  console.log("Mom coudn't buy me the phone because ", reason);
});
momsPromise.finally(function() {
  console.log(
    "Irrespecitve of whether my mom can buy me a phone or not, I still love her"
  );
});

Результат

  • Как видите, поскольку «momsSavings» недостаточно для оплаты Iphone, обещание было отклонено и сработал метод catch.
  • Он также активировал метод «наконец-то», который срабатывает независимо от результата.

Счастливая история

Чтобы у истории был счастливый конец, я сделал пожертвование семье, чтобы мать могла купить телефон своему сыну.

var momsPromise = new Promise(function(resolve, reject) {
  momsSavings = 200;
  priceOfPhone = 700;
  roriDonation = 600;
if (momsSavings + roriDonation > priceOfPhone) {
    resolve({
      brand: "iphone",
      model: "6s"
    });
  } else {
    reject("We donot have enough savings. Let us save some more money.");
  }
});
momsPromise.then(function(value) {
  console.log("Hurray I got this phone as a gift, thank you Rori");
});
momsPromise.catch(function(reason) {
  console.log("Mom coudn't buy me the phone because ", reason);
});
momsPromise.finally(function() {
  console.log(
    "Irrespecitve of whether my mom can buy me a phone or not, I still love her"
  );
});

Результат

  • И, как вы можете видеть, это вызвало метод «тогда», означающий, что сын может получить значение обещания.
  • И снова снова сработал метод «наконец», потому что он срабатывал независимо от результата.