⊗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 функцияси асинхрон, шунинг учун юқорида келтирилган код ишламayди. Аммо, промисларнинг синхрон услубидан фойдалансак, biz ўхшаш нарсага эриша оламиз. Буни қилайлик.

Аввало биз func функциямизни махсус async командаси ёрдамида асинхрон эълон қилишимиз керак:

async function func() { }

Шундан сўнг биз func функциясининг ичида махсус await командасидан foydalanishimiz мумкин бўлади. Ушбу команда, промис олдида ёзилганда, JavaScript промис бажарилгунича кутishга мажбур қилади. Шундан сўнг команда промиснинг натижасини қайтаради ва коднинг бажарилиши давом этади.

Бизнинг ҳолатимизда биз await ни getSmth чақириги олдида ёзишимиз керак. Чунки ушбу функцияни чақириш натижаси промис бўлгани учун, коднинг keyingi бажарилиши фақатгина ушбу промис бажарилгандан сўнггина давом этади. Ҳамда, промис натижаси ўзгарувчига ёзилиши мумкин. Юқорида таърифлаб ўтилганларни амалга оширамиз:

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

Энди esa 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ščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeOʻzbekTiếng Việt
Биз веб-сайт ишлаши, таҳлил қилиш ва персоналлаштириш учун кукидан фойдаланамиз. Маълумотларни қайта ишлаш Махфийлик сиёсатига мувофиқ амалга оширилади.
ҳаммасини қабул қилиш мослаштириш рад этиш