⊗jsSpPrmSS 174 of 294 menu

Промис у синхроном стилу у JavaScript-у

За решавање проблема promise hell осмишљен је посебан синтакса за промис који омогућава писање асинхроног кода много лакше - у синхроном стилу.

Хајде да почнемо са његовим проучавањем. За почетак узмемо код из претходне лекције:

function func() { getSmth(2).then(res => { console.log(res); // исписаће 4 }); } func();

Да је наша функција getSmth била синхрона, онда бисмо код функције func могли преписати на следећи начин:

function func() { let res = getSmth(2); console.log(res); // исписаће 4 }

Функција getSmth је, међутим, асинхрона, па горњи код неће функционисати. Али, користећи синхрони стил промиса, можемо добити нешто слично. Хајде да то урадимо.

За почетак морамо прогласити нашу функцију func асинхроном користећи специјалну команду async:

async function func() { }

Након тога ћемо моћи унутар функције func да користимо специјалну команду await. Ова команда, написана испред промиса, ће натерати JavaScript да чека док се промис не изврши. После тога команда ће вратити резултат промиса, и извршавање кода ће се наставити.

У нашем случају морамо написати await испред позива getSmth. Пошто ће резултат позива ове функције бити промис, онда ће се даље извршавање кода наставити тек после извршења тог промиса. Па, а резултат промиса можемо уписати у променљиву. Урадимо описано:

async function func() { let res = await getSmth(2); console.log(res); // исписаће 4 } func();

Хајде да позовемо getSmth више пута:

async function func() { let res1 = await getSmth(2); let res2 = await getSmth(3); console.log(res1 + res2); // исписаће 13 } func();

А сада ћемо позивати getSmth у петљи:

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

Препишите следећи код преко синхроног синтаксе:

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