JavaScript Promise nima va qanday ishlaydi
Callback hell — ichma-ich callback’lardan iborat o’qib bo’lmaydigan kod. Promise shu muammoni hal qiladi: asinxron natijani obyekt sifatida ifodalaydi va zanjir bilan yozishga imkon beradi.
Promise nima
Promise — “kelajakda keladigan qiymat” uchun idish. Buyurtma chekiga o’xshaydi: ovqat hali tayyor emas, lekin qo’lingizda keyin olishingiz haqidagi kafolat bor.
then bilan natijani olish
Birinchi console.log Promise { <pending> } ko’rsatdi — javob hali yo’q.
then esa natija tayyor bo’lganda chaqiriladigan callback’ni qayd qiladi.
Promise yaratish
new Promise ikkita funksiya beradi: birinchisi muvaffaqiyat, ikkinchisi xato
uchun:
An’anaviy nomlar — resolve va reject. Bu yerda ma’nosi ko’rinishi uchun
o’zbekcha nomlangan; ular oddiy parametr, nomi ixtiyoriy.
catch — xatoni ushlash
Xato yuz berganda then o’tkazib yuboriladi va boshqaruv catch ga
tushadi — try/catch mantig’i bilan bir xil.
Zanjir — callback hell yechimi
then yangi Promise qaytaradi, shuning uchun ularni ketma-ket ulash
mumkin:
Chuqurlik oshmadi — qadamlar tekis ro’yxat bo’lib qoldi. Callback variantini eslang: har qadam bir daraja ichkariga kirardi.
then ichida nima qaytarilsa, keyingi then shuni oladi. Promise
qaytarilsa — zanjir uning javobini kutadi.
finally
Natija qanday bo’lishidan qat’i nazar bajariladigan blok:
Odatda yuklanish belgisini o’chirish uchun ishlatiladi.
Promise.all — parallel kutish
Bir nechta amalni bir vaqtda boshlab, hammasini kutish:
Natija massivi berilgan tartibda qaytadi, tugash tartibida emas. Umumiy vaqt — eng uzunining vaqti (300 ms), yig’indisi (600 ms) emas.
Bittasi rad etilsa, butun all rad etiladi. Hammasining natijasi kerak
bo’lsa — Promise.allSettled ishlatiladi:
Tayyor Promise
Qiymat allaqachon ma’lum bo’lganda, uni Promise ichiga o’rash uchun.
Amaliy mashq
- 1 soniyadan keyin matn qaytaradigan Promise yozing;
- shartga qarab
resolveyokirejectchaqiradigan funksiya tuzing; - uch qadamli
thenzanjiri yasang — har qadam qiymatni o’zgartirsin; - zanjirga
catchvafinallyqo’shing; Promise.allbilan uchta kechikishni parallel ishlatib, vaqtni chamalang;thenichidareturnni olib tashlab, natija qanday buzilishini ko’ring.
6-qadam zanjirdagi eng ko’p uchraydigan xatoni ko’rsatadi.
Qisqacha xulosa
- Promise — kelajakdagi natija uchun obyekt: pending → fulfilled/rejected.
thennatijani,catchxatoni,finallyhar ikki holatni ushlaydi.thenyangi Promise qaytaradi — shuning uchun zanjir tuziladi.- Zanjirda Promise qaytarilsa, keyingi qadam uni kutadi.
Promise.allparallel kutadi;allSettledhammasining holatini beradi.- Holat bir marta o’rnatiladi va keyin o’zgarmaydi.
Keyingi darsda async va await — Promise’ni yanada sodda yozish usuli.