⊗jsSpPrmSS 174 of 294 menu

Promisi v sinhronem slogu v JavaScript

Za rešitev problema promise hell je bil izumljen poseben skladnji promisov, ki omogoča pisanje asinhrone kode veliko lažje - v sinhronem slogu.

Pridimo k njegovemu preučevanju. Za začetek vzemimo kodo iz prejšnje lekcije:

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

Če bi bila naša funkcija getSmth sinhrona, potem bi kodo funkcije func lahko prepisali na naslednji način:

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

Funkcija getSmth je vendar asinhrona, zato zgornja koda ne bo delovala. Toda, z uporabo sinhronega sloga promisov, bomo lahko dobili nekaj podobnega. Naredimo to.

Za začetek moramo našo funkcijo func razglasiti za asinhrono s posebnim ukazom async:

async function func() { }

Po tem bomo znotraj funkcije func lahko uporabili poseben ukaz await. Ta ukaz, napisan pred promisom, bo prisilil JavaScript, da čaka, dokler se promis ne izvede. Po tem bo ukaz vrnil rezultat promisa in izvajanje kode se bo nadaljevalo.

V našem primeru moramo napisati await pred klic getSmth. Ker bo rezultat klica te funkcije promis, se bo nadaljnje izvajanje kode nadaljevalo šele po izvedbi tega promisa. No, rezultat promisa pa lahko zapišemo v spremenljivko. Naredimo opisano:

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

Pokličimo getSmth večkrat:

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

In zdaj pokličimo getSmth v zanki:

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 naslednjo kodo prek sinhrone skladnje:

function func() { getSmth(2).then(res1 => { getSmth(3).then(res2 => { getSmth(4).then(res3 => { console.log(res1 + res2 + res3); }); }); }); } func();
Slovenščina
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Za delovanje spletnega mesta, analitiko in personalizacijo uporabljamo piškotke. Obdelava podatkov poteka v skladu s Politiko zasebnosti.
sprejmi vse nastavi zavrni