⊗jsSpPrmSS 174 of 294 menu

Promisiuni în stil sincron în JavaScript

Pentru a rezolva problema promise hell a fost creată o sintaxă specială pentru promisiuni, care permite scrierea codului asincron mult mai ușor - în stil sincron.

Să începem să o studiem. Pentru început să luăm codul din lecția precedentă:

function func() { getSmth(2).then(res => { console.log(res); // va afișa 4 }); } func();

Dacă funcția noastră getSmth ar fi fost sincronă, atunci codul funcției func l-am fi putut rescrie în felul următor:

function func() { let res = getSmth(2); console.log(res); // va afișa 4 }

Funcția getSmth, însă, este asincronă, de aceea codul de mai sus nu va funcționa. Dar, folosind stilul sincron al promisiunilor, vom putea obține ceva asemănător. Să facem asta.

Pentru început trebuie să declarăm funcția noastră func ca fiind asincronă folosind comanda specială async:

async function func() { }

După aceasta vom putea în interiorul funcției func să folosim comanda specială await. Această comandă, scrisă înaintea unei promisiuni, va forța JavaScript să aștepte până când promisiunea se va finaliza. După aceasta comanda va returna rezultatul promisiunii, iar execuția codului va continua.

În cazul nostru, trebuie să scriem await înaintea apelului getSmth. Deoarece rezultatul apelului acestei funcții va fi o promisiune, atunci execuția ulterioară a codului va continua doar după finalizarea acestei promisiuni. Ei bine, iar rezultatul promisiunii poate fi scris într-o variabilă. Să facem ce s-a descris:

async function func() { let res = await getSmth(2); console.log(res); // va afișa 4 } func();

Să apelăm getSmth de mai multe ori:

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

Iar acum să apelăm getSmth într-o buclă:

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

Rescrieți următorul cod prin sintaxa sincronă:

function func() { getSmth(2).then(res1 => { getSmth(3).then(res2 => { getSmth(4).then(res3 => { console.log(res1 + res2 + res3); }); }); }); } func();
Română
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Folosim cookie pentru funcționarea site-ului, analiză și personalizare. Prelucrarea datelor are loc în conformitate cu Politica de confidențialitate.
acceptă toate configurează respinge