JavaScript Promise și Promise Chaining

În acest tutorial, veți afla despre promisiunile JavaScript și promisiunile înlănțuite cu ajutorul exemplelor.

În JavaScript, o promisiune este o modalitate bună de a gestiona operațiunile asincrone . Este folosit pentru a afla dacă operațiunea asincronă este finalizată cu succes sau nu.

O promisiune poate avea una din cele trei stări.

  • In asteptarea
  • Împlinit
  • Respins

O promisiune începe într-o stare în așteptare. Asta înseamnă că procesul nu este complet. Dacă operațiunea are succes, procesul se încheie într-o stare îndeplinită. Și, dacă apare o eroare, procesul se termină într-o stare respinsă.

De exemplu, atunci când solicitați date de la server folosind o promisiune, acestea vor fi într-o stare în așteptare. Când datele sosesc cu succes, vor fi într-o stare îndeplinită. Dacă apare o eroare, atunci aceasta va fi într-o stare respinsă.

Creați o promisiune

Pentru a crea un obiect promis, folosim Promise()constructorul.

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

Promise()Constructorul are o funcție ca argument. Funcția acceptă, de asemenea, două funcții resolve()și reject().

Dacă promisiunea revine cu succes, resolve()funcția este apelată. Și, dacă apare o eroare, reject()funcția se numește.

Să presupunem că programul de mai jos este un program asincron. Apoi, programul poate fi gestionat folosind o promisiune.

Exemplul 1: Program cu o promisiune

 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);

Ieșire

 Promisiune (: „Există o valoare de numărare.”)

În programul de mai sus, Promiseeste creat un obiect care are două funcții: resolve()și reject(). resolve()este utilizat dacă procesul are succes și reject()este utilizat atunci când apare o eroare în promisiune.

Promisiunea este rezolvată dacă valoarea numărării este adevărată.

Funcționarea promisiunii JavaScript

JavaScript Promise Chaining

Promisiunile sunt utile atunci când trebuie să vă ocupați de mai multe sarcini asincrone, una după alta. Pentru aceasta, folosim înlănțuirea promisiunii.

Puteți efectua o operație după o promisiune este rezolvată folosind metode then(), catch()și finally().

JavaScript apoi () metoda

then()Metoda este folosită cu apel invers atunci când promisiunea este îndeplinită cu succes sau rezolvate.

Sintaxa then()metodei este:

 promiseObject.then(onFulfilled, onRejected);

Exemplul 2: Înlănțuirea Promisiunii cu 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.'); ), );

Ieșire

 Promisiunea rezolvată Puteți apela mai multe funcții în acest fel.

În programul de mai sus, then()metoda este utilizată pentru a lega funcțiile de promisiune. then()Metoda se numește atunci când promisiunea este rezolvată cu succes.

Puteți lega mai multe then()metode cu promisiunea.

Metoda JavaScript catch ()

catch()Metoda este folosită cu apel invers atunci când promisiunea este respinsă sau în cazul în care apare o eroare. De exemplu,

 // 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); ) );

Ieșire

 Promisiunea respinsă

În programul de mai sus, promisiunea este respinsă. Și catch()metoda este utilizată cu promisiunea de a rezolva eroarea.

Funcționarea JavaScript promite înlănțuirea

JavaScript Promis Versus Callback

Promisiunile sunt similare cu funcțiile de apel invers într-un sens în care ambele pot fi utilizate pentru a gestiona sarcini asincrone.

Funcțiile de apel invers JavaScript pot fi, de asemenea, utilizate pentru a efectua sarcini sincrone.

Diferențele lor pot fi rezumate în următoarele puncte:

JavaScript Promise

  1. Sintaxa este ușor de utilizat și ușor de citit.
  2. Tratarea erorilor este mai ușor de gestionat.
  3. Exemplu:
     api (). then (function (result) (return api2 ();)). then (function (result2) (return api3 ();)). then (function (result3) (// do work)). catch ( funcție (eroare) (// gestionează orice eroare care poate apărea înainte de acest punct));

JavaScript Callback

  1. Sintaxa este greu de înțeles.
  2. Tratarea erorilor poate fi dificil de gestionat.
  3. Exemplu:
     api (funcție (rezultat) (api2 (funcție (rezultat2) (api3 (funcție (rezultat3) (// funcționează dacă (eroare) (// faceți ceva) altceva (// faceți ceva)));));)) ;

JavaScript în cele din urmă () metoda

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.

Articole interesante...