Promise va async/await qanday ishlaydi?

MiddleJavaScript #javascript #async #promises

Savol

Promise nima va u async/await bilan qanday bog'liq?

Qisqa javob

Promise — asinxron amal natijasini uchta holatdan birida ifodalovchi obyekt: pending, fulfilled yoki rejected. async/await — asinxron kodni sinxron uslubda yozish imkonini beruvchi promise'lar ustidagi sintaktik shakar.

Batafsil javob

Promise resolve yoki rejectni chaqiradigan executor-funksiya bilan yaratiladi:

new Promise((resolve, reject) => {
  // ...
})

Promise holati faqat bir marta va qaytarilmas tarzda o'zgaradi. .then()/.catch()/.finally() metodlari mikrovazifalar sifatida bajariladigan ishlovchilarni ro'yxatdan o'tkazadi.

async function doim promise qaytaradi. await promise hal bo'lgunga qadar funksiya bajarilishini asosiy oqimni bloklamasdan to'xtatib turadi — qopqoq ostida bu ham mikrovazifalar bilan ishlash.

Foydali statik metodlar:

  • Promise.all — barcha promise'larni kutadi, birinchi xatoda yiqiladi.
  • Promise.allSettled — barchasini kutadi, yiqilmaydi, har birining holatini qaytaradi.
  • Promise.race — birinchi tugagan promise bo'yicha hal bo'ladi/rad etiladi.

Misol

async function loadUser(id) {
  try {
    const response = await fetch(`/api/users/${id}`)
    if (!response.ok) throw new Error("Yuklab bo'lmadi")
    return await response.json()
  } catch (error) {
    console.error(error)
    throw error
  }
}

// Ketma-ket await o'rniga parallel bajarilish
const [user, posts] = await Promise.all([
  loadUser(1),
  fetch('/api/posts').then(r => r.json())
])

Qo'shimcha savollar

  • Promise.all va Promise.allSettled o'rtasidagi farq nimada?
  • Rad etilgan promise qayta ishlanmasa, nima bo'ladi?
  • Nega siklda ketma-ket await Promise.alldan sekinroq?

Bog'liq savollar