V tej vadnici boste s pomočjo primerov spoznali obljube JavaScript in veriženje obljub.
V JavaScript je obljuba dober način za obdelavo asinhronih operacij. Uporablja se za ugotavljanje, ali je asinhrona operacija uspešno zaključena ali ne.
Obljuba ima lahko eno od treh stanj.
- V teku
- Izpolnjeno
- Zavrnjeno
Obljuba se začne v stanju v teku. To pomeni, da postopek ni končan. Če je operacija uspešna, se postopek konča v izpolnjenem stanju. In če pride do napake, se postopek konča v zavrnjenem stanju.
Ko na primer s strežnikom z obljubo zahtevate podatke, bodo ti v stanju čakanja. Ko bodo podatki uspešno prispeli, bodo v izpolnjenem stanju. Če pride do napake, bo stanje zavrnjeno.
Ustvari obljubo
Za izdelavo obljubljenega predmeta uporabimo Promise()
konstruktor.
let promise = new Promise(function(resolve, reject)( //do something ));
Promise()
Konstruktor ima funkcijo kot argument. Funkcija sprejema tudi dve funkciji resolve()
in reject()
.
Če se obljuba uspešno vrne, resolve()
se pokliče funkcija. In če pride do napake, se reject()
funkcija pokliče.
Predpostavimo, da je spodnji program asinhroni program. Nato lahko program obdelate z uporabo obljube.
Primer 1: Program z obljubo
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);
Izhod
Promise (: "Obstaja vrednost štetja.")
V zgornjem programu Promise
je ustvarjen objekt, ki ima dve funkciji: resolve()
in reject()
. resolve()
se uporablja, če je postopek uspešen in reject()
se uporablja, ko pride do napake v obljubi.
Obljuba se reši, če je vrednost štetja resnična.
![](https://cdn.wiki-base.com/5343878/javascript_promise_and_promise_chaining.png.webp)
JavaScript Promise Chaining
Obljube so koristne, ko morate eno za drugo obdelati več asinhronih opravil. Za to uporabljamo veriženje obljub.
Lahko izvedete operacijo po obljuba rešiti z metodami then()
, catch()
in finally()
.
Metoda JavaScript then ()
then()
Metoda se uporablja pri povratni klic, ko je obljuba uspešno izpolnjena ali rešiti.
Sintaksa then()
metode je:
promiseObject.then(onFulfilled, onRejected);
Primer 2: Privezovanje obljube z 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.'); ), );
Izhod
Obljuba je razrešena Na ta način lahko pokličete več funkcij.
V zgornjem programu se then()
metoda uporablja za veriženje funkcij na obljubo. then()
Metoda se imenuje, ko je obljuba uspešno rešili.
Z then()
obljubo lahko povežete več metod.
Metoda catch ()
catch()
Metoda se uporablja pri povratni klic, ko je obljuba zavrnjena ali če pride do napake. Na primer
// 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); ) );
Izhod
Obljuba zavrnjena
V zgornjem programu je obljuba zavrnjena. In catch()
metoda se uporablja z obljubo, da bo obravnavala napako.
![](https://cdn.wiki-base.com/5343878/javascript_promise_and_promise_chaining_2.png.webp)
JavaScript Promise Versus Callback
Obljube so podobne funkcijam povratnega klica v smislu, da jih je mogoče uporabiti za obdelavo asinhronih nalog.
Funkcije povratnega klica JavaScript se lahko uporabljajo tudi za izvajanje sinhronih nalog.
Njihove razlike lahko povzamemo v naslednjih točkah:
JavaScript Promise
- Sintaksa je uporabniku prijazna in enostavna za branje.
- Lažje je obvladovanje napak.
- Primer:
api (). potem (funkcija (rezultat) (vrnitev api2 ();)). nato (funkcija (rezultat2) (vrnitev api3 ();)). potem (funkcija (rezultat3) (// opravim delo)). catch ( funkcija (napaka) (// obravnava morebitne napake, ki se lahko pojavijo pred to točko));
JavaScript povratni klic
- Sintaksa je težko razumljiva.
- Obvladovanje napak je morda težko obvladati.
- Primer:
api (funkcija (rezultat) (api2 (funkcija (rezultat2) (api3 (funkcija (rezultat3) (// delaj, če (napaka) (// naredi nekaj) drugo (// naredi nekaj)));));)) ;
Metoda JavaScript na koncu ()
finally()
Metodo lahko uporabite tudi z obljubami. finally()
Način dobi izvrši, ko je obljuba bodisi uspešno odpravili ali zavrne. Na primer
// 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.'); ) );
Izhod
Ta koda se izvede.
Metode obljube JavaScript
Objektu Promise so na voljo različne metode.
Metoda | Opis |
---|---|
all(iterable) | Čaka, da se rešijo vse obljube ali zavrnejo katere koli |
allSettled(iterable) | Počaka, da se vse obljube rešijo ali zavrnejo |
any(iterable) | Vrne vrednost obljube, takoj ko je katera od obljub izpolnjena |
race(iterable) | Počakajte, da se katera od obljub reši ali zavrne |
reject(reason) | Vrne nov objekt Promise, ki je zavrnjen iz navedenega razloga |
resolve(value) | Vrne nov objekt Promise, ki je razrešen z dano vrednostjo |
catch() | Prikaže povratni klic vodnika zavrnitve |
then() | Doda razrešen povratni klic upravljavca |
finally() | Obljubi doda vodnika |
Če želite izvedeti več o obljubah v podrobnostih, obiščite JavaScript Promises.