⊗jsSpPrmSS 174 of 294 menu

Promise-ok szinkron stílusban JavaScriptben

A promise hell problémájának megoldására kifejlesztettek egy speciális promise szintaxist, amely lehetővé teszi az aszinkron kód sokkal egyszerűbb írását - szinkron stílusban.

Kezdjük is el tanulmányozását. Először vegyük az előző leckéből a kódot:

function func() { getSmth(2).then(res => { console.log(res); // kiírja a 4-et }); } func();

Ha a getSmth függvényünk szinkron lenne, akkor a func függvény kódját a következőképpen írhatnánk át:

function func() { let res = getSmth(2); console.log(res); // kiírja a 4-et }

A getSmth függvény azonban aszinkron, ezért a fenti kód nem fog működni. De a promise-ok szinkron stílusának kihasználásával valami hasonlót érhetünk el. Tegyük ezt meg.

Először is deklarálnunk kell a func függvényünket aszinkronná a speciális async paranccsal:

async function func() { }

Ezek után a func függvényen belül használhatjuk a speciális await parancsot. Ez a parancs, amit egy promise elé írunk, arra kényszeríti a JavaScriptet, hogy várjon, amíg a promise befejeződik. Ez után a parancs visszaadja a promise eredményét, és a kód végrehajtása folytatódik.

Esetünkben a await-et a getSmth hívása elé kell írnunk. Mivel ennek a függvénynek a hívása promise-ot ad vissza, a további kódvégrehajtás csak a promise teljesítése után folytatódik. Nos, a promise eredményét pedig el lehet menteni egy változóba. Valósítsuk meg a leírtakat:

async function func() { let res = await getSmth(2); console.log(res); // kiírja a 4-et } func();

Hívjuk meg a getSmth-et többször:

async function func() { let res1 = await getSmth(2); let res2 = await getSmth(3); console.log(res1 + res2); // kiírja a 13-at } func();

Most pedig hívjuk meg a getSmth-et ciklusban:

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

Írja át a következő kódot szinkron szintaxisra:

function func() { getSmth(2).then(res1 => { getSmth(3).then(res2 => { getSmth(4).then(res3 => { console.log(res1 + res2 + res3); }); }); }); } func();
Magyar
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
A weboldal működéséhez, elemzéshez és személyre szabáshoz sütiket használunk. Az adatfeldolgozás a Adatvédelmi irányelvek szerint történik.
összes elfogadása beállítás elutasítás