⊗jsSpPrmFC 171 of 294 menu

Vytváření okamžitě splněných promisů v JavaScriptu

Někdy může být potřeba vytvořit již splněný promis. K tomu existují dvě metody: metoda Promise.resolve vytváří úspěšně splněný promis, Promise.reject vytváří zamítnutý promis. Parametrem tyto metody přijímají to, co se stane výsledkem nebo chybou promisu.

Kdy může být potřeba již splněný promis? Podívejme se na příklad. Předpokládejme, že máme nějakou funkci, která parametrem přijímá číslo, něco s ním asynchronně dělá a vrací promis s výsledkem:

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

Naší funkcí budeme používat následujícím způsobem:

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

Předpokládejme nyní, že jsme se rozhodli, že naši asynchronní operaci provedeme pouze pokud je předáno číslo větší než nula. V opačném případě výsledkem funkce má být nula:

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

Avšak nyní se stane, že funkce vrací buď promis, nebo číslo. Kvůli tomu již nemůžeme aplikovat metodu then na výsledek funkce, protože v případě vrácení číslo funkci dostaneme chybu:

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

Vyřešit 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); // vracíme promis, ne číslo } }

Předpokládejme nyní, že jsme se rozhodli, že pro předanou nulu máme vrátit nulu, a pro čísla menší než nula - výjimku. S tím nám pomůže metoda 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átíme zamítnutý promis } }
Čeština
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Používáme soubory cookie pro fungování webu, analýzu a personalizaci. Zpracování údajů probíhá v souladu s Zásadami ochrany osobních údajů.
přijmout vše přizpůsobit odmítnout