⊗jsSpPrmSS 174 of 294 menu

Promiset synkronisessa tyylissä JavaScriptissä

Ongelman promise hell ratkaisemiseksi kehitettiin erityinen promisien syntaksi, joka mahdollistaa asynkronisen koodin kirjoittamisen paljon helpommin - synkronisessa tyylissä.

Aloitetaan sen opiskeleminen. Aluksi otetaan koodi edellisestä oppitunnista:

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

Jos funktiomme getSmth olisi synkroninen, voisimme kirjoittaa funktion func koodin uudelleen seuraavasti:

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

Funktio getSmth on kuitenkin asynkroninen, joten yllä oleva koodi ei toimi. Mutta hyödyntämällä promisien synkronista tyyliä voimme saada aikaan jotain vastaavaa. Tehdään niin.

Aluksi meidän on ilmoitettava funktiomme func asynkroniseksi käyttämällä erityistä komentoa async:

async function func() { }

Tämän jälkeen voimme funktion func sisällä käyttää erityistä komentoa await. Tämä komento, kirjoitettuna ennen promisia, pakottaa JavaScriptin odottamaan, kunnes promis suoritetaan. Tämän jälkeen komento palauttaa promisin tuloksen, ja koodin suoritus jatkuu.

Meidän tapauksessamme meidän on kirjoitettava await ennen getSmth:n kutsua. Koska tämän funktion kutsun tulos on promis, koodin suoritus jatkuu vasta tämän promisin suorittamisen jälkeen. Ja promisin tulos voidaan tallentaa muuttujaan. Tehdään kuten on kuvailtu:

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

Kutsutaan getSmth:ä useita kertoja:

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

Ja nyt kutsutaan getSmth:ää silmukassa:

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

Kirjoita seuraava koodi uudelleen käyttäen synkronista syntaksia:

function func() { getSmth(2).then(res1 => { getSmth(3).then(res2 => { getSmth(4).then(res3 => { console.log(res1 + res2 + res3); }); }); }); } func();
Suomi
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Käytämme evästeitä verkkosivuston toiminnalle, analytiikalle ja personoinnille. Tietojen käsittely tapahtuu Tietosuojakäytännön mukaisesti.
hyväksy kaikki mukauta hylkää