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.allvaPromise.allSettledo'rtasidagi farq nimada?- Rad etilgan promise qayta ishlanmasa, nima bo'ladi?
- Nega siklda ketma-ket
awaitPromise.alldan sekinroq?