Обещание на JavaScript и обещаване на обещания

В този урок ще научите за обещанията на JavaScript и веригите обещания с помощта на примери.

В JavaScript обещанието е добър начин за справяне с асинхронни операции. Използва се за установяване дали асинхронната операция е завършена успешно или не.

Обещанието може да има едно от трите състояния.

  • В очакване
  • Изпълнено
  • Отхвърлено

Обещанието започва в чакащо състояние. Това означава, че процесът не е завършен. Ако операцията е успешна, процесът завършва в изпълнено състояние. И ако възникне грешка, процесът завършва в отхвърлено състояние.

Например, когато заявите данни от сървъра с помощта на обещание, те ще бъдат в чакащо състояние. Когато данните пристигнат успешно, те ще бъдат в изпълнено състояние. Ако възникне грешка, тя ще бъде в отхвърлено състояние.

Създайте обещание

За да създадем обещаващ обект, използваме Promise()конструктора.

 let promise = new Promise(function(resolve, reject)( //do something ));

В Promise()конструкторът да функция като аргумент. Функцията също така приема две функции resolve()и reject().

Ако обещанието се върне успешно, resolve()функцията се извиква. И ако възникне грешка, reject()функцията се извиква.

Да предположим, че програмата по-долу е асинхронна програма. Тогава програмата може да се обработва чрез обещание.

Пример 1: Програма с обещание

 const count = true; let countValue = new Promise(function (resolve, reject) ( if (count) ( resolve("There is a count value."); ) else ( reject("There is no count value"); ) )); console.log(countValue);

Изход

 Promise (: „Има стойност за броене.“)

В горната програма Promiseсе създава обект, който изпълнява две функции: resolve()и reject(). resolve()се използва, ако процесът е успешен и reject()се използва, когато възникне грешка в обещанието.

Обещанието се разрешава, ако стойността на count е вярна.

Работа на JavaScript обещание

JavaScript обещаване верига

Обещанията са полезни, когато трябва да се справяте с повече от една асинхронна задача, една след друга. За това използваме верига за обещания.

Можете да извършвате операция след обещание е решен с помощта на методи then(), catch()и finally().

JavaScript метод then ()

В then()метода се използва с телефонния секретар, когато обещанието е изпълнено успешно или разрешен.

Синтаксисът на then()метода е:

 promiseObject.then(onFulfilled, onRejected);

Пример 2: Осигуряване на обещанието с then ()

 // returns a promise let countValue = new Promise(function (resolve, reject) ( resolve('Promise resolved'); )); // executes when promise is resolved successfully countValue.then( function successValue(result) ( console.log(result); ), ) .then( function successValue1() ( console.log('You can call multiple functions this way.'); ), );

Изход

 Обещанието е разрешено Можете да извикате множество функции по този начин.

В горната програма then()методът се използва за свързване на функциите към обещанието. В then()метод се нарича, когато обещанието не бъде разрешен успешно.

Можете да свържете множество then()методи с обещанието.

JavaScript метод catch ()

В catch()метода се използва с телефонния секретар, когато обещанието бъде отхвърлено или ако възникне грешка. Например,

 // returns a promise let countValue = new Promise(function (resolve, reject) ( reject('Promise rejected'); )); // executes when promise is resolved successfully countValue.then( function successValue(result) ( console.log(result); ), ) // executes if there is an error .catch( function errorValue(result) ( console.log(result); ) );

Изход

 Обещанието е отхвърлено

В горната програма обещанието е отхвърлено. И catch()методът се използва с обещание да се справи с грешката.

Работа на верига за обещания на JavaScript

JavaScript Promise Versus Callback

Обещанията са подобни на функциите за обратно извикване в смисъл, че и двете могат да се използват за обработка на асинхронни задачи.

Функциите за обратно извикване на JavaScript също могат да се използват за изпълнение на синхронни задачи.

Техните разлики могат да бъдат обобщени в следните точки:

JavaScript Promise

  1. Синтаксисът е лесен за ползване и лесен за четене.
  2. Управлението на грешки е по-лесно за управление.
  3. Пример:
     api (). след това (функция (резултат) (връщане api2 ();)). след това (функция (резултат2) (връщане api3 ();)). след това (функция (резултат3) (// върши работа)). catch ( функция (грешка) (// обработваме всяка грешка, която може да възникне преди тази точка));

Обратно извикване на JavaScript

  1. Синтаксисът е труден за разбиране.
  2. Обработката на грешки може да е трудна за управление.
  3. Пример:
     api (функция (резултат)) (api2 (функция (резултат2) (api3 (функция (резултат3)) (// върши работа, ако (грешка) (// направи нещо) друго (// направи нещо)));));)) ;

JavaScript окончателно () метод

You can also use the finally() method with promises. The finally() method gets executed when the promise is either resolved successfully or rejected. For example,

 // returns a promise let countValue = new Promise(function (resolve, reject) ( // could be resolved or rejected resolve('Promise resolved'); )); // add other blocks of code countValue.finally( function greet() ( console.log('This code is executed.'); ) );

Output

 This code is executed.

JavaScript Promise Methods

There are various methods available to the Promise object.

Method Description
all(iterable) Waits for all promises to be resolved or any one to be rejected
allSettled(iterable) Waits until all promises are either resolved or rejected
any(iterable) Returns the promise value as soon as any one of the promises is fulfilled
race(iterable) Wait until any of the promises is resolved or rejected
reject(reason) Returns a new Promise object that is rejected for the given reason
resolve(value) Returns a new Promise object that is resolved with the given value
catch() Appends the rejection handler callback
then() Appends the resolved handler callback
finally() Appends a handler to the promise

To learn more about promises in detail, visit JavaScript Promises.

Интересни статии...