⊗jsSpPrmSS 174 of 294 menu

Promisy v synchronním stylu v JavaScriptu

Pro řešení problému promise hell byl vymyšlen speciální syntax pro promisy, umožňující psát asynchronní kód mnohem jednodušeji - v synchronním stylu.

Pojďme se jej naučit. Nejprve si vezmeme kód z předchozí lekce:

function func() { getSmth(2).then(res => { console.log(res); // vypíše 4 }); } func();

Kdyby naše funkce getSmth byla synchronní, pak bychom kód funkce func mohli přepsat následovně:

function func() { let res = getSmth(2); console.log(res); // vypíše 4 }

Funkce getSmth je však asynchronní, proto výše uvedený kód nebude fungovat. Ale pomocí synchronního stylu promisů můžeme dosáhnout něčeho podobného. Pojďme na to.

Nejprve musíme deklarovat naši funkci func jako asynchronní pomocí speciálního příkazu async:

async function func() { }

Poté budeme uvnitř funkce func moci používat speciální příkaz await. Tento příkaz, napsaný před promisem, donutí JavaScript čekat, dokud promisa nedokončí svůj běh. Poté příkaz vrátí výsledek promisy a provádění kódu bude pokračovat.

V našem případě musíme napsat await před volání getSmth. Protože výsledkem volání této funkce bude promisa, další provádění kódu bude pokračovat pouze po dokončení této promisy. No, a výsledek promisy lze zapsat do proměnné. Proveďme popsané:

async function func() { let res = await getSmth(2); console.log(res); // vypíše 4 } func();

Pojďme zavolat getSmth několikrát:

async function func() { let res1 = await getSmth(2); let res2 = await getSmth(3); console.log(res1 + res2); // vypíše 13 } func();

A nyní budeme volat getSmth v cyklu:

async function func() { let arr = [1, 2, 3, 4, 5]; let sum = 0; for (let elem of arr) { sum += await getSmth(elem); } console.log(sum); } func();

Přepište následující kód pomocí synchronní syntaxe:

function func() { getSmth(2).then(res1 => { getSmth(3).then(res2 => { getSmth(4).then(res3 => { console.log(res1 + res2 + res3); }); }); }); } func();
Č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