Skip to content

JavaScript-da Promislar (Promises) ​

"Men sizga natijani va'da qilaman!" — Promise asinxron amallarni osonroq va tartibliroq boshqarish uchun yaratilgan obyekt hisoblanadi.


Promise nima?

Promise — bu asinxron amalning yakunlanishi yoki muvaffaqiyatsizligi haqidagi ma'lumotni saqlaydigan "konteyner" obyektidir.


Promise Holatlari (States) ​

Promise har doim quyidagi uchta holatdan birida bo'ladi:

Holat (State)Tavsifi
PendingAmal boshlangan, lekin hali tugallanmagan (kutish).
FulfilledAmal muvaffaqiyatli yakunlandi va natija tayyor.
RejectedAmalda xatolik yuz berdi.

Nima uchun Promislar kerak? ​

Ccallback-lar yordamida yozilgan kodlar (ayniqsa "callback hell") o'qishga juda murakkab bo'ladi. Promislar xuddi shu mantiqni o'qilishi oson va tartibli zanjir ko'rinishida yozishga imkon beradi.

Misol: Callback Hell vs Promise ​

js
// Callback bilan (eski usul):
step1(function (r1) {
  step2(r1, function (r2) {
    console.log(r2)
  })
})

// Promise bilan (yangi usul):
step1()
  .then((r1) => step2(r1))
  .then((r2) => console.log(r2))

Promise yaratish ​

Promise konstruktori ikkita parametr (resolve va reject) qabul qiladigan funksiyani oladi.

Sintaksis ​

js
let myPromise = new Promise(function (resolve, reject) {
  // Ba'zi asinxron ishlar...

  if (muvaffaqiyatli) {
    resolve(natija) // Natija qaytaradi
  } else {
    reject(xato) // Xatolik qaytaradi
  }
})

Promise-dan foydalanish: then() va catch() ​

Promise natijasini olish uchun biz uning metodlaridan foydalanamiz:

  • .then() — muvaffaqiyatli natija (resolve) uchun.
  • .catch() — xatolik (reject) uchun.
  • .finally() — natija qanday bo'lishidan qat'iy nazar oxirida bajariladi.

Misol ​

js
myPromise
  .then(function (value) {
    console.log('Muvaffaqiyatli: ' + value)
  })
  .catch(function (error) {
    console.log('Xato: ' + error)
  })

Promise Zanjiri (Chaining) ​

Promislarning eng kuchli tomoni — ularni bir-biriga ulash mumkinligidir. Har bir .then() yangi Promise qaytarishi mumkin.

Misol ​

js
fetch('data.json')
  .then((response) => response.json()) // JSON-ga o'giradi (Promise qaytaradi)
  .then((data) => console.log(data)) // Ma'lumotni chiqaradi
  .catch((err) => console.error(err)) // Xaroni ushlaydi

Muhim

Zanjirning istalgan joyida yuz bergan xato oxiridagi bitta .catch() orqali ushlanadi. Bu kodni ancha toza qiladi.


Promise API Metodlari ​

Agar sizda bir nechta promislar bo'lsa, ularni bir vaqtda boshqarish mumkin:

  • Promise.all([p1, p2]) — Hamma promislar muvaffaqiyatli bo'lsagina natija qaytaradi.
  • Promise.allSettled([p1, p2]) — Bor bo'lgan barcha natijalarni (xato bo'lsa ham) qaytaradi.
  • Promise.race([p1, p2]) — Qaysi birinchi tugasa (winner), o'shani qaytaradi.

To'liq promislar ma'lumotnomasi »