⊗jsSpPrmSS 174 of 294 menu

Promisi u sinhronom stilu u JavaScriptu

Da bi se rešio problem promise hell, osmišljena je posebna sintaksa promisa koja omogućava da se asinhroni kod piše mnogo jednostavnije - u sinhronom stilu.

Hajde da počnemo s njenim proučavanjem. Za početak uzmimo kod iz prethodne lekcije:

function func() { getSmth(2).then(res => { console.log(res); // ispisaće 4 }); } func();

Da je naša funkcija getSmth bila sinhrona, onda bismo kod funkcije func mogli da prepišemo na sledeći način:

function func() { let res = getSmth(2); console.log(res); // ispisaće 4 }

Međutim, funkcija getSmth je asinhrona, pa gornji kod neće raditi. Ali, koristeći se sinhronim stilom promisa, možemo da dobijemo nešto slično. Hajde da to uradimo.

Za početak moramo da deklarišemo našu funkciju func kao asinhronu pomoću posebne komande async:

async function func() { }

Posle toga ćemo unutar funkcije func moći da koristimo posebnu komandu await. Ova komanda, napisana ispred promisa, nateraće JavaScript da čeka dok se promis ne izvrši. Nakon toga, komanda će vratiti rezultat promisa, i izvršenje koda će se nastaviti.

U našem slučaju, moramo da napišemo await ispred poziva getSmth. Pošto će rezultat poziva ove funkcije biti promis, onda će se dalje izvršenje koda nastaviti tek nakon izvršenja tog promisa. Pa, rezultat promisa možemo da upišemo u promenljivu. Uradimo opisanu stvar:

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

Hajde da pozovemo getSmth nekoliko puta:

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

A sada da pozivamo getSmth u petlji:

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

Prepišite sledeći kod koristeći sinhronu sintaksu:

function func() { getSmth(2).then(res1 => { getSmth(3).then(res2 => { getSmth(4).then(res3 => { console.log(res1 + res2 + res3); }); }); }); } func();
Srpski
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Koristimo kolačiće za rad sajta, analitiku i personalizaciju. Obrada podataka se vrši u skladu sa Politikom privatnosti.
prihvati sve podesi odbij