JavaScript Promise i Promise Chaining

U ovom ćete uputstvu uz primjere naučiti o JavaScript obećanjima i lancima obećanja.

U JavaScriptu je obećanje dobar način za rukovanje asinkronim operacijama. Koristi se za otkrivanje je li asinkrona operacija uspješno dovršena ili nije.

Obećanje može imati jedno od tri stanja.

  • U tijeku
  • Ispunjeno
  • Odbijen

Obećanje započinje u stanju na čekanju. To znači da postupak nije dovršen. Ako je operacija uspješna, postupak završava u ispunjenom stanju. A ako se dogodi pogreška, postupak završava u odbijenom stanju.

Na primjer, kada podatke od poslužitelja zatražite pomoću obećanja, oni će biti u stanju na čekanju. Kada podaci uspješno stignu, bit će u ispunjenom stanju. Ako se dogodi pogreška, tada će biti u odbijenom stanju.

Stvorite obećanje

Da bismo stvorili obećavajući objekt, koristimo Promise()konstruktor.

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

Promise()Konstruktor ima funkciju kao argument. Funkcija također prihvaća dvije funkcije resolve()i reject().

Ako se obećanje vrati uspješno, resolve()poziva se funkcija. A ako se dogodi pogreška, reject()funkcija se poziva.

Pretpostavimo da je program u nastavku asinkroni program. Tada se programom može upravljati pomoću obećanja.

Primjer 1: Program s obećanjem

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

Izlaz

 Promise (: "Postoji vrijednost brojanja.")

U gornjem programu Promisestvoren je objekt koji ima dvije funkcije: resolve()i reject(). resolve()koristi se ako je postupak uspješan i reject()koristi se kada se u obećanju dogodi pogreška.

Obećanje se razrješava ako je vrijednost count istinita.

Rad JavaScript obećanja

JavaScript lančano obećanje

Obećanja su korisna kada morate rješavati više od jednog asinkronog zadatka, jedno za drugim. Za to koristimo lanac obećanja.

Možete izvesti operaciju nakon obećanje metodama then(), catch()a finally().

JavaScript tada () metoda

then()Metoda se koristi sa povratni poziv, kada obećanje uspješno ispunjeni ili riješen.

Sintaksa then()metode je:

 promiseObject.then(onFulfilled, onRejected);

Primjer 2: Lanciranje obećanja pomoću 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.'); ), );

Izlaz

 Obećanje je riješeno Na ovaj način možete pozvati više funkcija.

U gore navedenom programu then()metoda se koristi za povezivanje funkcija u obećanje. then()Metoda se zove kad obećanje je uspješno riješen.

Pomoću then()obećanja možete povezati više metoda.

JavaScript catch () metoda

catch()Metoda se koristi sa povratni poziv, kada obećanje odbijen ili ako dođe do pogreške. Na primjer,

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

Izlaz

 Odbijeno obećanje

U gornjem programu obećanje se odbija. A catch()metoda se koristi s obećanjem da će riješiti pogrešku.

Rad lanca obećanja JavaScript-a

JavaScript Promise Versus Callback

Obećanja su slična funkcijama povratnog poziva u smislu da se obje mogu koristiti za obradu asinkronih zadataka.

JavaScript funkcije povratnog poziva mogu se koristiti i za izvršavanje sinkronih zadataka.

Njihove razlike mogu se sažeti u sljedeće točke:

JavaScript obećanje

  1. Sintaksa je jednostavna za upotrebu i laka za čitanje.
  2. Lakše je upravljati rješavanjem pogrešaka.
  3. Primjer:
     api (). zatim (funkcija (rezultat) (povratak api2 ();)). zatim (funkcija (rezultat2) (povratak api3 ();)). zatim (funkcija (rezultat3) (// radim)). catch ( function (error) (// obrađujemo svaku pogrešku koja se može dogoditi prije ove točke));

JavaScript povratni poziv

  1. Sintaksu je teško razumjeti.
  2. Upravljanje pogreškama može biti teško upravljati.
  3. Primjer:
     api (funkcija (rezultat)) (api2 (funkcija (rezultat2) (api3 (funkcija (rezultat3) (// radim ako (pogreška) (// radim nešto) drugo (// radim nešto)));));)) ;

JavaScript konačno () metoda

finally()Metodu možete koristiti i s obećanjima. finally()Način dobiva pogubili kad je obećanje bilo je uspješno riješen ili odbijen. Na primjer,

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

Izlaz

 Ovaj se kôd izvršava.

JavaScript obećavajuće metode

Objektu Promise dostupne su razne metode.

Metoda Opis
all(iterable) Čeka da se sva obećanja razriješe ili neko odbije
allSettled(iterable) Čeka dok se sva obećanja ne riješe ili odbiju
any(iterable) Vraća vrijednost obećanja čim se ispuni neko od obećanja
race(iterable) Pričekajte dok se neko od obećanja ne riješi ili odbije
reject(reason) Vraća novi Promise objekt koji je odbijen iz zadanog razloga
resolve(value) Vraća novi Promise objekt koji je riješen zadanom vrijednošću
catch() Dodaje povratni poziv voditelja odbijanja
then() Dodaje razriješeni povratni poziv rukovatelja
finally() Dodaje voditelja obećanju

Da biste detaljnije saznali više o obećanjima, posjetite JavaScript Promises.

Zanimljivi članci...