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 Promise
stvoren 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ćanjaJavaScript 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.
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
- Sintaksa je jednostavna za upotrebu i laka za čitanje.
- Lakše je upravljati rješavanjem pogrešaka.
- 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
- Sintaksu je teško razumjeti.
- Upravljanje pogreškama može biti teško upravljati.
- 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.