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 »