JavaScript Promise і Promise Chaining

У цьому підручнику ви дізнаєтесь про обіцянки 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об'єкт, який виконує дві функції: 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()методів обіцянкою.

Метод 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 (). then (function (result) (return api2 ();)). then (function (result2) (return api3 ();)). then (function (result3) (// do work)). catch ( function (error) (// обробляємо будь-яку помилку, яка може виникнути до цього моменту));

Зворотний дзвінок JavaScript

  1. Синтаксис важко зрозуміти.
  2. Управління помилками може бути важким.
  3. Приклад:
     api (function (result) (api2 (function (result2) (api3 (function (result3) (// виконати роботу, якщо (помилка) (// зробити щось) ще (// зробити щось)));));)) ;

Метод 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.

Цікаві статті...