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

JavaScript

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:

JavaScript

An’anaviy nomlar — resolve va reject. Bu yerda ma’nosi ko’rinishi uchun o’zbekcha nomlangan; ular oddiy parametr, nomi ixtiyoriy.

catch — xatoni ushlash

JavaScript

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:

JavaScript

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:

JavaScript

Odatda yuklanish belgisini o’chirish uchun ishlatiladi.

Promise.all — parallel kutish

Bir nechta amalni bir vaqtda boshlab, hammasini kutish:

JavaScript

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:

JavaScript

Tayyor Promise

JavaScript

Qiymat allaqachon ma’lum bo’lganda, uni Promise ichiga o’rash uchun.

Amaliy mashq

  1. 1 soniyadan keyin matn qaytaradigan Promise yozing;
  2. shartga qarab resolve yoki reject chaqiradigan funksiya tuzing;
  3. uch qadamli then zanjiri yasang — har qadam qiymatni o’zgartirsin;
  4. zanjirga catch va finally qo’shing;
  5. Promise.all bilan uchta kechikishni parallel ishlatib, vaqtni chamalang;
  6. then ichida return ni 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.
  • then natijani, catch xatoni, finally har ikki holatni ushlaydi.
  • then yangi Promise qaytaradi — shuning uchun zanjir tuziladi.
  • Zanjirda Promise qaytarilsa, keyingi qadam uni kutadi.
  • Promise.all parallel kutadi; allSettled hammasining holatini beradi.
  • Holat bir marta o’rnatiladi va keyin o’zgarmaydi.

Keyingi darsda async va await — Promise’ni yanada sodda yozish usuli.

Bu dars foydali bo'ldimi?

—
— marta ko'rildi