⊗jsSpPrmInr 162 of 294 menu

JavaScript-da promislar bilan tanishish

Siz allaqachon bilasizki, asinxronlik uchun callback modelidan foydalanish osongina callback hell vaziyatiga olib keladi. Shuning uchun JavaScript-da promislar (promise) deb nomlangan yangi model kiritildi. Keling, ushbu modelni o'rganaylik.

Promis ob'ektni ifodalaydi, uning parametri sifatida funktsiya uzatiladi, uning ichida bizning asinxron kodimiz joylashgan bo'lishi kerak:

let promise = new Promise(function() { // asinxron kod });

Ko'rib turganingizdek, men promis ob'ektini promise o'zgaruvchisiga yozdim. Kodning boshqa joyida men ushbu o'zgaruvchiga then metodini qo'llashim mumkin, unga funktsiyani uzatib, ushbu promis yaratilganda yozilgan asinxron kod tugagandan so'ng bajariladigan kod bilan:

promise.then(function() { // asinxron kod tugaganda bajariladi });

Bu chalkash tuyulishi mumkin, shuning uchun keling, misolni ko'rib chiqaylik. Menda quyidagi asinxron kod bor deb faraz qilaylik:

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

Faraz qilaylik, men unga asinxronlikning asosiy vazifasini hal qilmoqchiman: taymer ishlagandan keyin ma'lum bir kodni bajarish. Bunda men ushbu kodni taymerning o'zida joylashtirishni xohlamayman va ushbu kodga qandaydir tarzda result o'zgaruvchisida yozilgan natija tushishini xohlayman. Umuman olganda, biz bu vazifani oldingi darslarda callback lar va obunalar orqali hal qilganmiz. Keling endi buni promislar orqali qanday qilishni ko'rib chiqaylik.

Boshlash uchun asinxron kodimizni promisga o'rashimiz kerak:

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

Biroq, bu yetarli emas. Biz asinxron kodimiz tugaganligini aniq ko'rsatishimiz kerak. Bunda bizga parametr sifatida ko'rsatilgan funktsiyaning birinchi parametriga avtomatik ravishda tushadigan maxsus tugatish funktsiyasi yordam beradi:

let promise = new Promise(function(resolve) { // parametrni ko'rsatamiz setTimeout(function() { let result = [1, 2, 3, 4, 5]; }, 3000); });

Tugatish funktsiyasi yordamida biz promisga asinxron kod tugaganligini aniq ko'rsatishimiz mumkin. Buning uchun biz ushbu funktsiyani o'zimiz xohlagan joyda chaqirishimiz kerak:

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

Bunda, agar biz asinxron kodning qandaydir natijasini tashqariga uzatmoqchi bo'lsak, uni tugatish funktsiyamizning parametri sifatida uzatishimiz mumkin:

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

Albatta, oraliq o'zgaruvchisiz ham qilish mumkin:

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

Endi biz har qanday boshqa joyda promisimizning then metodini chaqirishimiz mumkin:

promise.then(function() { // promis tugaganda ishlaydi });

Agar biz xohlasak, promisning ishlash natijasi funktsiyaning birinchi parametriga tushadi:

promise.then(function(result) { console.log(result); // natija massivini chiqaradi });

Ichimida 5 soniya kechikish bo'lgan promis yarating, shundan so'ng promis bajarilishi kerak, o'z natijasida qandaydir matn qaytaradi. Ushbu matnni ekranga chiqaring.

Oʻzbek
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекTiếng Việt
Biz sayt ishlashi, tahlil qilish va shaxsiylashtirish uchun cookie-fayllardan foydalanamiz. Ma'lumotlarni qayta ishlash Maxfiylik siyosatiga muvofiq amalga oshiriladi.
hammasini qabul qilish sozlash rad etish