JavaScript lupaa ja lupa ketjua

Tässä opetusohjelmassa opit JavaScript-lupauksista ja lupausten ketjutuksesta esimerkkien avulla.

JavaScriptissä lupaus on hyvä tapa käsitellä asynkronisia toimintoja. Sitä käytetään selvittämään, onko asynkroninen toiminta suoritettu onnistuneesti vai ei.

Lupauksella voi olla yksi kolmesta tilasta.

  • Odottaa
  • Täytetty
  • Hylätty

Lupaus alkaa vireillä olevassa tilassa. Tämä tarkoittaa, että prosessi ei ole valmis. Jos operaatio onnistuu, prosessi päättyy toteutuneeseen tilaan. Ja jos tapahtuu virhe, prosessi päättyy hylättyyn tilaan.

Esimerkiksi kun pyydät tietoja palvelimelta lupauksen avulla, ne ovat odottavassa tilassa. Kun tiedot saapuvat onnistuneesti, ne ovat toteutuneessa tilassa. Jos tapahtuu virhe, se on hylätyssä tilassa.

Luo lupaus

Lupauksen objektin luomiseen käytämme Promise()konstruktoria.

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

Promise()Rakentaja tekee funktion argumenttina. Toiminto hyväksyy myös kaksi toimintoa resolve()ja reject().

Jos lupaus palautuu onnistuneesti, resolve()funktio kutsutaan. Ja jos tapahtuu virhe, reject()toiminto kutsutaan.

Oletetaan, että alla oleva ohjelma on asynkroninen ohjelma. Sitten ohjelma voidaan hoitaa lupauksella.

Esimerkki 1: Ohjelma lupauksella

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

Tuotos

 Lupa (: "Laskenta-arvo on.")

Yllä olevassa ohjelmassa luodaan Promiseobjekti, jolla on kaksi toimintoa: resolve()ja reject(). resolve()käytetään, jos prosessi on onnistunut, ja reject()sitä käytetään, kun lupauksessa tapahtuu virhe.

Lupaus ratkaistaan, jos laskennan arvo on tosi.

JavaScript-lupauksen toiminta

JavaScript lupaa ketjutuksen

Lupauksista on hyötyä, kun joudut käsittelemään useampaa kuin yhtä asynkronista tehtävää yksi toisensa jälkeen. Tätä varten käytämme lupausten ketjutusta.

Voit suorittaa operaation jälkeen lupaus on ratkaistu käyttämällä menetelmiä then(), catch()ja finally().

JavaScript then () -menetelmä

then()Menetelmää käytetään soittopyyntö kun lupaus täytti tai hävinneet.

Menetelmän syntaksi then()on:

 promiseObject.then(onFulfilled, onRejected);

Esimerkki 2: Lupauksen ketjuaminen silloin ()

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

Tuotos

 Lupaus ratkaistu Voit soittaa useita toimintoja tällä tavalla.

Yllä olevassa ohjelmassa then()menetelmää käytetään ketjuamaan toiminnot lupaukseen. then()Menetelmää kutsutaan, kun lupaus on ratkaistu onnistuneesti.

Voit ketjuttaa useita then()menetelmiä lupauksella.

JavaScript catch () -menetelmä

catch()Menetelmää käytetään soittopyyntö kun lupauksen hylätään tai jos tapahtuu virhe. Esimerkiksi,

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

Tuotos

 Lupaus hylätty

Edellä mainitussa ohjelmassa lupaus hylätään. Ja catch()menetelmää käytetään lupauksella käsitellä virhe.

Java-lupauksen ketjutuksen toiminta

JavaScript-lupaus Versus-takaisinsoittoon

Lupaukset ovat samanlaisia ​​kuin soittopyynnöt siinä mielessä, että niitä molempia voidaan käyttää asynkronisten tehtävien hoitamiseen.

JavaScript-soittopyyntöjä voidaan käyttää myös synkronoitujen tehtävien suorittamiseen.

Niiden erot voidaan tiivistää seuraaviin kohtiin:

JavaScript-lupaus

  1. Syntaksi on käyttäjäystävällinen ja helppo lukea.
  2. Virheenkäsittelyä on helpompi hallita.
  3. Esimerkki:
     api (). sitten (funktio (tulos) (palauta api2 ();))). sitten (funktio (tulos2) (palauta api3 ();))). sitten (funktio (tulos3) (// tee työtä)). function (error) (// käsittele kaikki virheet, jotka voivat ilmetä ennen tätä kohtaa));

JavaScript-soittopyyntö

  1. Syntaksi on vaikea ymmärtää.
  2. Virheiden käsittelyä voi olla vaikea hallita.
  3. Esimerkki:
     api (funktio (tulos) (api2 (funktio (tulos2)) (api3 (funktio (tulos3) (// tee työtä, jos (virhe) (// tee jotain) muuta (// tee jotain));));)) ;

JavaScript viimein () - menetelmä

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.

Mielenkiintoisia artikkeleita...