⊗jsSpPrmSS 174 of 294 menu

Promisy w synchronicznym stylu w JavaScript

Dla rozwiązania problemu promise hell wymyślono specjalną składnię promisów, pozwalającą pisać kod asynchroniczny znacznie prościej - w synchronicznym stylu.

Zacznijmy jej naukę. Na początek weźmy kod z poprzedniej lekcji:

function func() { getSmth(2).then(res => { console.log(res); // wyświetli 4 }); } func();

Gdyby nasza funkcja getSmth była synchroniczna, to kod funkcji func mogliśmy przepisać w następujący sposób:

function func() { let res = getSmth(2); console.log(res); // wyświetli 4 }

Funkcja getSmth jest jednak asynchroniczna, więc powyższy kod nie zadziała. Ale, korzystając z synchronicznego stylu promisów, będziemy mogli uzyskać coś podobnego. Zróbmy to.

Na początku musimy zadeklarować naszą funkcję func jako asynchroniczną za pomocą specjalnej komendy async:

async function func() { }

Po tym będziemy mogli wewnątrz funkcji func używać specjalnej komendy await. Ta komenda, napisana przed promisem, sprawi, że JavaScript będzie czekał do momentu, aż promis się wykona. Po czym komenda zwróci wynik promisa, i wykonanie kodu będzie kontynuowane.

W naszym przypadku musimy napisać await przed wywołaniem getSmth. Ponieważ wynikiem wywołania tej funkcji będzie promis, to dalsze wykonanie kodu będzie kontynuowane tylko po wykonaniu tego promisa. No, a wynik promisa można zapisać do zmiennej. Zróbmy opisane:

async function func() { let res = await getSmth(2); console.log(res); // wyświetli 4 } func();

Wywołajmy getSmth kilka razy:

async function func() { let res1 = await getSmth(2); let res2 = await getSmth(3); console.log(res1 + res2); // wyświetli 13 } func();

A teraz wywołujmy getSmth w pętli:

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();

Przepisz następujący kod przez składnię synchroniczną:

function func() { getSmth(2).then(res1 => { getSmth(3).then(res2 => { getSmth(4).then(res3 => { console.log(res1 + res2 + res3); }); }); }); } func();
Polski
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Wykorzystujemy pliki cookie do działania strony, analizy i personalizacji. Przetwarzanie danych odbywa się zgodnie z Polityką prywatności.
zaakceptuj wszystkie dostosuj odrzuć