Šajā apmācībā jūs uzzināsit par JavaScript solījumiem un solījumu ķēdēšanu ar piemēru palīdzību.
Programmā JavaScript solījums ir labs veids, kā rīkoties ar asinhronām darbībām. To izmanto, lai uzzinātu, vai asinhronā darbība ir veiksmīgi pabeigta.
Solījumam var būt viens no trim stāvokļiem.
- Gaida
- Izpildīts
- Noraidīts
Solījums sākas gaidīšanas stāvoklī. Tas nozīmē, ka process nav pabeigts. Ja darbība ir veiksmīga, process beidzas izpildītā stāvoklī. Un, ja rodas kļūda, process beidzas noraidītā stāvoklī.
Piemēram, kad jūs pieprasāt datus no servera, izmantojot solījumu, tie būs gaidīšanas stāvoklī. Kad dati būs veiksmīgi saņemti, tie būs izpildītā stāvoklī. Ja rodas kļūda, tā būs noraidītā stāvoklī.
Izveidojiet solījumu
Lai izveidotu solījumu objektu, mēs izmantojam Promise()
konstruktoru.
let promise = new Promise(function(resolve, reject)( //do something ));
Promise()
Būvētājs notiek funkciju kā argumentu. Funkcija pieņem arī divas funkcijas resolve()
un reject()
.
Ja solījums atgriežas veiksmīgi, resolve()
tiek izsaukta funkcija. Un, ja rodas kļūda, reject()
tiek izsaukta funkcija.
Pieņemsim, ka zemāk redzamā programma ir asinhrona programma. Tad programmu var apstrādāt, izmantojot solījumu.
1. piemērs: Programma ar solījumu
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);
Rezultāts
Solījums (: "Ir skaitīšanas vērtība.")
Iepriekš minētajā programmā Promise
tiek izveidots objekts, kuram ir divas funkcijas: resolve()
un reject()
. resolve()
tiek izmantots, ja process ir veiksmīgs, un reject()
tiek izmantots, ja solījumā rodas kļūda.
Solījums tiek atrisināts, ja skaitīšanas vērtība ir patiesa.

JavaScript solījumu ķēde
Solījumi ir noderīgi, ja nākas rīkoties vairāk nekā ar vienu asinhronu uzdevumu vienu pēc otra. Tam mēs izmantojam solījumu ķēdi.
Jūs varat veikt darbību pēc tam, kad solījums ir atrisināts, izmantojot metodes then()
, catch()
un finally()
.
JavaScript tad () metode
then()
Metode tiek izmantota ar atzvanu kad solījums ir veiksmīgi izpildīts vai atrisināt.
Metodes sintakse then()
ir:
promiseObject.then(onFulfilled, onRejected);
2. piemērs: Apsolīt ķēdi ar (()
// 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.'); ), );
Rezultāts
Solījums atrisināts Šādā veidā varat izsaukt vairākas funkcijas.
Iepriekš minētajā programmā then()
metodi izmanto, lai funkcijas saistītu ar solījumu. then()
Metode tiek saukta kad solījums ir veiksmīgi atrisināta.
Jūs varat sasaistīt vairākas then()
metodes ar solījumu.
JavaScript catch () metode
catch()
Metode tiek izmantota ar atzvanu kad solījums tiek noraidīts vai ja rodas kļūda. Piemēram,
// 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); ) );
Rezultāts
Solījums noraidīts
Iepriekš minētajā programmā solījums tiek noraidīts. Un catch()
metodi izmanto ar solījumu rīkoties ar kļūdu.

JavaScript solījums salīdzinājumā ar atzvanīšanu
Solījumi savā ziņā ir līdzīgi atzvanīšanas funkcijām, jo tos abus var izmantot asinhronu uzdevumu apstrādei.
Sinhrono uzdevumu veikšanai var izmantot arī JavaScript atzvanīšanas funkcijas.
To atšķirības var apkopot šādos punktos:
JavaScript solījums
- Sintakse ir lietotājam draudzīga un viegli lasāma.
- Kļūdu apstrādi ir vieglāk pārvaldīt.
- Piemērs:
api (). tad (funkcija (rezultāts) (atgriež api2 ();))). pēc tam (funkcija (rezultāts2) (atgriež api3 ();))). pēc tam (funkcija (rezultāts3) (// veic darbu)). catch ( funkcija (kļūda) (// rīkoties ar jebkuru kļūdu, kas var rasties pirms šī punkta));
JavaScript atzvanīšana
- Sintakse ir grūti saprotama.
- Kļūdu apstrādi, iespējams, ir grūti pārvaldīt.
- Piemērs:
api (funkcija (rezultāts) (api2 (funkcija (rezultāts2)) (api3 (funkcija (rezultāts3) (// darīt darbu, ja (kļūda) (// darīt kaut ko) citu (// kaut ko darīt));));)) ;
JavaScript beidzot () metode
Jūs varat arī izmantot finally()
metodi ar solījumiem. finally()
Metode tiek izpildīts, kad solījums vai nu atrisināta veiksmīgi vai noraidīts. Piemēram,
// 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.'); ) );
Rezultāts
Šis kods tiek izpildīts.
JavaScript solījumu metodes
Objektam Promise ir pieejamas dažādas metodes.
Metode | Apraksts |
---|---|
all(iterable) | Gaida visu solījumu atrisināšanu vai jebkuru noraidīšanu |
allSettled(iterable) | Gaida, līdz visi solījumi tiek atrisināti vai noraidīti |
any(iterable) | Atgriež solītā vērtību, tiklīdz kāds no solījumiem ir izpildīts |
race(iterable) | Pagaidiet, līdz kāds no solījumiem tiek atrisināts vai noraidīts |
reject(reason) | Atgriež jaunu solījumu objektu, kas noraidīts norādītā iemesla dēļ |
resolve(value) | Atgriež jaunu solījumu objektu, kas ir atrisināts ar norādīto vērtību |
catch() | Pievieno noraidījuma apstrādātāja atzvanīšanu |
then() | Pievieno atrisināto apstrādātāja atzvanīšanu |
finally() | Solītājam pievieno apdarinātāju |
Lai sīkāk uzzinātu vairāk par solījumiem, apmeklējiet JavaScript solījumus.