⊗jsSpPrmInr 162 of 294 menu

JavaScript да промислар билан ишлаш

Сиз аллақачон биласизки, асинхронлик учун коллбэк-моделидан фойдаланиш осонгина callback hell вазиятiga olib keladi. Шу сабабли JavaScript да промислар (promise) деб номланган янги модель киритилди. Келинг, бу модельни ўрганамиз.

Промис объект бу́либ, унга параметр сифатида функция берилади, унинг ичида биз асинхрон кодимизни joylashimiz керак:

let promise = new Promise(function() { // асинхрон код });

Кўриб turganingizdek, мен промис bilan объектни promise ўзгарувчисига yukladim. Коднинг бошқа joyida мен бу ўзгарувчига then методини қўллаб, унга бу промис яратилгандаги асинхрон код tugagandan sóng бажарилиши керак бўлган код bilan функцияни берishim мумкин:

promise.then(function() { // асинхрон код tugaganda бажарилади });

Эшитилиши chalkash boʻlib tuyilishi мумкин, шу сабабли келинг, мисол bilan koʻramiz. Менда куйидаги асинхрон код бор деб faraz qilaylik:

setTimeout(function() { let result = [1, 2, 3, 4, 5]; }, 3000);

Фароз qilaylik, мен унга aсинхронликning asosiy vazifasini ечишни истайман: таймер ишга tushgandan keyin maʼлум кодни бажариш. Бунда мен бу кодни таймернинг ўзида joylashitirishни istamayman ва бу кодга qandaydir tarzda result ўзгарувчисида мен yozган натижа tushishini istayman. Умуман olganda, биз бу vazifani oldingi дарсларда коллбэклар ва обуналар орқали ечганмиз. Келинг, endi уни промислар орқали qanday bajarishni koʻramiz.

Бошлаб, бизнинг асинхрон кодимизни промис ichiga o‘ramiz kerak:

let promise = new Promise(function() { setTimeout(function() { let result = [1, 2, 3, 4, 5]; }, 3000); });

Бирок, бу етарли эмас. Биз асинхрон кодимиз tugaganligini aniq koʻrsatishimiz керак. Бунда бизга функцияning биринчи параметри кўрсатилган бўлса, автoматик ravishda унга tushadigan махсус tugatish функцияси ёрдам беради:

let promise = new Promise(function(resolve) { // параметрни кўрсатамиз setTimeout(function() { let result = [1, 2, 3, 4, 5]; }, 3000); });

Tugatish функцияси ёрдамида биз промисга асинхрон код tugaganligini аниқ кўрсатишимиз мумкин. Бунги учун биз бу функцияни ўзимиз xohlagан joyда чакиришимиз керак:

let promise = new Promise(function(resolve) { setTimeout(function() { let result = [1, 2, 3, 4, 5]; resolve(); // промисни tugatamiz }, 3000); });

Бунда, агар биз асинхрон коднинг qandaydir натижасини tashqariga uzatmoqchi boʻlsak, уни ўз tugatish функциямизга параметр сифатида uzatishimiz мумкин:

let promise = new Promise(function(resolve) { setTimeout(function() { let result = [1, 2, 3, 4, 5]; resolve(result); // натижани uzatamiz }, 3000); });

Албатта, вақтинча ўзгарувчидан xalos boʻlish мумкин:

let promise = new Promise(function(resolve) { setTimeout(function() { resolve([1, 2, 3, 4, 5]); }, 3000); });

Endi биз har qanday boshqa joyда ўз промисимизнинг then методини чакиришимиз мумкин:

promise.then(function() { // промис tugaganda ишга tushadi });

Промиснинг натижаси, агар биз уни кўрсатмоқчи бўлсак, функциянинг биринчи параметрига tushadi:

promise.then(function(result) { console.log(result); // натижа bilan массивни чикаради });

Промис яранг, унинг ичида 5 soniyaлик kechikish boʻlsin, shundan soʻng промис tugashi керак, ўз натижаси сифатида qandaydir матнни qaytarsin. Бу матнни экранга чикаринг.

Ўзбек
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
Биз веб-сайт ишлаши, таҳлил қилиш ва персоналлаштириш учун кукидан фойдаланамиз. Маълумотларни қайта ишлаш Махфийлик сиёсатига мувофиқ амалга оширилади.
ҳаммасини қабул қилиш мослаштириш рад этиш