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.

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.

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.