V tomto tutoriáli sa pomocou príkladov dozviete o sľuboch JavaScript a ich reťazení.
V JavaScripte je prísľub dobrý spôsob spracovania asynchrónnych operácií. Používa sa na zistenie, či je asynchrónna operácia úspešne dokončená alebo nie.
Sľub môže mať jeden z troch štátov.
- Čaká sa
- Splnené
- Zamietnuté
Sľub sa začína v nespracovanom stave. To znamená, že proces nie je dokončený. Ak je operácia úspešná, proces končí v splnenom stave. Ak sa vyskytne chyba, proces sa skončí v odmietnutom stave.
Napríklad, keď požadujete údaje zo servera pomocou prísľubu, budú v stave čakania. Keď dáta dorazia úspešne, budú v splnenom stave. Ak sa vyskytne chyba, bude v odmietnutom stave.
Vytvorte sľub
Na vytvorenie sľubovaného objektu používame Promise()
konštruktor.
let promise = new Promise(function(resolve, reject)( //do something ));
Promise()
Konštruktor vezme funkciu ako argument. Táto funkcia akceptuje aj dve funkcie resolve()
a reject()
.
Ak sa sľub úspešne vráti, resolve()
funkcia sa volá. A ak dôjde k chybe, reject()
funkcia sa zavolá.
Predpokladajme, že program uvedený nižšie je asynchrónny program. Potom je možné program zvládnuť pomocou prísľubu.
Príklad 1: Program s prísľubom
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ýkon
Prísľub (: „Existuje početná hodnota.“)
Vo vyššie uvedenom programe Promise
je vytvorený objekt, ktorý má dve funkcie: resolve()
a reject()
. resolve()
sa používa, ak je proces úspešný, a reject()
používa sa, keď sa v sľube vyskytne chyba.
Sľub je vyriešený, ak je hodnota počtu pravdivá.
![](https://cdn.wiki-base.com/5343878/javascript_promise_and_promise_chaining.png.webp)
Sľubovanie reťazcov JavaScriptu
Sľuby sú užitočné, keď musíte zvládnuť viac ako jednu asynchrónnu úlohu, jednu za druhou. Na tento účel používame reťazenie sľubov.
Môžete vykonať operáciu potom, čo sľub je vyriešený použitím metód then()
, catch()
a finally()
.
Metóda JavaScript then ()
then()
Metóda sa používa spolu s spätné volanie, ak je sľub úspešne splnila alebo vyriešené.
Syntax then()
metódy je:
promiseObject.then(onFulfilled, onRejected);
Príklad 2: Reťazenie sľubu pomocou 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.'); ), );
Výkon
Sľub vyriešený Týmto spôsobom môžete volať viac funkcií.
Vo vyššie uvedenom programe sa then()
metóda používa na reťazenie funkcií k prísľubu. then()
Metóda sa nazýva, ak je sľub úspešne vyriešený.
Sľubom môžete reťaziť viac then()
metód.
Metóda JavaScript ()
catch()
Metóda sa používa spolu s spätné volanie, ak je sľub zamietnutá, alebo dôjde k chybe. Napríklad,
// 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ýkon
Sľub odmietnutý
Vo vyššie uvedenom programe je prísľub odmietnutý. A catch()
metóda sa používa so sľubom, že chybu vyrieši.
![](https://cdn.wiki-base.com/5343878/javascript_promise_and_promise_chaining_2.png.webp)
Sľub JavaScript verzus spätné volanie
Sľuby sú podobné funkciám spätného volania v tom zmysle, že ich je možné použiť na zvládnutie asynchrónnych úloh.
JavaScript callback functions can also be used to perform synchronous tasks.
Their differences can be summarized in the following points:
JavaScript Promise
- The syntax is user-friendly and easy to read.
- Error handling is easier to manage.
- Example:
api().then(function(result) ( return api2() ; )).then(function(result2) ( return api3(); )).then(function(result3) ( // do work )).catch(function(error) ( //handle any error that may occur before this point ));
JavaScript Callback
- The syntax is difficult to understand.
- Error handling may be hard to manage.
- Example:
api(function(result)( api2(function(result2)( api3(function(result3)( // do work if(error) ( // do something ) else ( // do something ) )); )); ));
JavaScript finally() method
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.