⊗jsSpPrmFC 171 of 294 menu

Vytváranie splnených promisov v JavaScripte

Niekedy môžete potrebovať vytvoriť už splnený promis. Na to existujú dve metódy: metóda Promise.resolve vytvára úspešne splnený promis, Promise.reject vytvára zamietnutý promis. Parametrom tieto metódy dostávajú to, čo sa stane výsledkom alebo chybou promisu.

Kedy môžeme potrebovať už splnený promis? Pozrime sa na príklad. Nech máme nejakú funkciu, ktorá parametrom prijíma číslo, niečo s ním robí asynchrónne a vracia promis s výsledkom:

function func(num) { return new Promise(function(resolve) { setTimeout(function() { resolve(num * num); }, 3000); }); }

Budeme používať našu funkciu nasledovným spôsobom:

func(5).then(function(res) { console.log(res); // vypíše 25 });

Nech sa teraz rozhodneme, že našu asynchrónnu operáciu vykonáme, iba ak je zadané číslo väčšie ako nula. V opačnom prípade výsledkom funkcie má byť nula:

function func(num) { if (num > 0) { return new Promise(function(resolve) { setTimeout(function() { resolve(num * num); }, 3000); }); } else { return 0; // nulový výsledok } }

Avšak teraz sa stáva, že funkcia vracia buď promis, alebo číslo. Kvôli tomu nemôžeme aplikovať metódu then na výsledok funkcie, pretože v prípade návratu čísla dostaneme chybu:

func(0).then(function(res) { // chyba, aplikujeme metódu then na nulu });

Vyriešiť problém nám pomôže Promise.resolve:

function func(num) { if (num > 0) { return new Promise(function(resolve) { setTimeout(function() { resolve(num * num); }, 3000); }); } else { return Promise.resolve(0); // vrátime promis, nie číslo } }

Nech sa teraz rozhodneme, že pre zadanú nulu máme vrátiť nulu, a pre čísla menšie ako nula - výnimku. V tom nám pomôže metóda Promise.reject:

function func(num) { if (num > 0) { return new Promise(function(resolve) { setTimeout(function() { resolve(num * num); }, 3000); }); } else if (num === 0) { return Promise.resolve(0); } else { return Promise.reject('incorrect number'); // vrátime zamietnutý promis } }
Slovenčina
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Používame cookies na fungovanie stránky, analýzu a personalizáciu. Spracúvanie údajov prebieha v súlade s Politikou ochrany osobných údajov.
prijať všetky nastaviť odmietnuť