JavaScripti lubadus ja lubadus aheldada

Selles õpetuses saate näidete abil teada JavaScripti lubadustest ja lubaduste aheldamisest.

JavaScripti puhul on lubadus hea viis asünkroonsete toimingute käsitlemiseks. Seda kasutatakse selleks, et teada saada, kas asünkroonne toiming on edukalt lõpule viidud või mitte.

Lubadusel võib olla üks kolmest osariigist.

  • Ootel
  • Täidetud
  • Tagasi lükatud

Lubadus algab ootel olekus. See tähendab, et protsess pole lõpule viidud. Kui toiming õnnestub, lõpeb protsess täidetud olekus. Ja kui ilmneb tõrge, lõpeb protsess tagasilükatud olekus.

Näiteks kui palute lubaduse abil serverilt andmeid, on need ootel olekus. Kui andmed saabuvad edukalt, on need täidetud olekus. Vea ilmnemisel on see tagasilükatud olekus.

Looge lubadus

Lubaduse objekti loomiseks kasutame Promise()konstruktorit.

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

Promise()Ehitaja võtab funktsiooni argumendina. Funktsioon aktsepteerib ka kahte funktsiooni resolve()ja reject().

Kui lubadus naaseb edukalt, resolve()kutsutakse funktsioon välja. Ja kui ilmneb tõrge, reject()nimetatakse funktsiooni.

Oletame, et allpool olev programm on asünkroonne programm. Siis saab programm lubaduse abil hakkama saada.

Näide 1: Programm lubadusega

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

Väljund

 Lubadus (: "Loendusväärtus on olemas.")

Ülaltoodud programmis luuakse Promiseobjekt, millel on kaks funktsiooni: resolve()ja reject(). resolve()kasutatakse juhul, kui protsess on edukas, ja reject()seda kasutatakse lubaduses tõrke ilmnemisel.

Lubadus lahendatakse, kui loenduse väärtus vastab tõele.

JavaScripti lubaduse toimimine

JavaScripti lubadus ketid

Lubadustest on kasu siis, kui peate järjest rohkem kui ühe asünkroonse ülesandega hakkama saama. Selleks kasutame lubaduste aheldamist.

Saate teha operatsiooni pärast lubadus on lahendatud kasutades meetodeid then(), catch()ja finally().

JavaScripti siis () meetod

then()Meetodit kasutada tagasihelistamise kui lubadus on edukalt täidetud või lahendatud.

Meetodi süntaks then()on:

 promiseObject.then(onFulfilled, onRejected);

Näide 2: Lubaduse aheldamine siis ()

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

Väljund

 Lubadus on lahendatud Sel viisil saate helistada mitmele funktsioonile.

Ülaltoodud programmis kasutatakse then()meetodit funktsioonide lubamiseks aheldamiseks. then()Meetodit nimetatakse kui lubadus on lahendatud edukalt.

then()Lubadusega saate aheldada mitut meetodit.

JavaScripti püüdmise () meetod

Seda catch()meetodit kasutatakse koos tagasihelistamisega, kui lubadus lükatakse tagasi või kui ilmneb tõrge. Näiteks,

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

Väljund

 Lubadus lükati tagasi

Ülaltoodud programmis lükatakse lubadus tagasi. Ja catch()meetodit kasutatakse lubadusega viga lahendada.

JavaScripti lubaduste aheldamine

JavaScripti lubadus versus tagasihelistamine

Lubadused sarnanevad teatud mõttes tagasihelistamisfunktsioonidega, et neid mõlemaid saab kasutada asünkroonsete ülesannete lahendamiseks.

JavaScripti tagasihelistamise funktsioone saab kasutada ka sünkroonsete ülesannete täitmiseks.

Nende erinevused võib kokku võtta järgmistes punktides:

JavaScripti lubadus

  1. Süntaks on kasutajasõbralik ja kergesti loetav.
  2. Veakäsitlust on lihtsam hallata.
  3. Näide:
     api (). siis (funktsioon (tulemus) (tagastab api2 ();))). siis (funktsioon (tulemus2) (tagastab api3 ();))). siis (funktsioon (tulemus3) (// tee tööd)). püüdma ( function (error) (// käsitseda kõiki vead, mis võivad tekkida enne seda punkti));

JavaScripti tagasihelistamine

  1. Süntaksit on raske mõista.
  2. Veakäsitlust võib olla raske hallata.
  3. Näide:
     api (funktsioon (tulemus) (api2 (funktsioon (tulemus2)) (api3 (funktsioon (tulemus3) (// tee tööd, kui (viga) (// tee midagi) muud (// tee midagi));;);)) ;

JavaScripti lõpuks () meetod

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.

Huvitavad Artiklid...