Middle
JavaScriptda asinxronlik prinsiplari haqida gapir.
sobes.tech AI
AIdan javob
JavaScript'da asinxronlik prinsiplari, asosiy bajarish modeliga asoslangan bo'lib, bu yerda vaqt talab qiladigan vazifalar (masalan, tarmoq so'rovlar, timerlar) asosiy bajarish oqimini to'xtatmaydi, bu esa boshqa harakatlarni amalga oshirish imkonini beradi. Bu quyidagilar yordamida amalga oshiriladi:
- Event Loop (Voqealar tsikli): Doimiy ravishda xabarlar navbati tekshiriladigan va undagi vazifalarni bajaradigan mexanizm. Asinxron operatsiya tugagach, uning callback'i vazifalar navbatiga qo'yiladi.
- Callback funksiyalar: Boshqa funksiyaga argument sifatida berilgan va asinxron operatsiya tugagach bajariladigan funksiyalar.
- Promises (Vado): Asinxron operatsiyaning yakuniy qiymatini ifodalovchi obyektlar; ular yoki muvaffaqiyatli (fulfilled) yoki rad etilgan (rejected) bo'lishi mumkin. Ular asinxron kod bilan ishlashni osonlashtiradi, "callback hell"dan qochishga yordam beradi.
- Async/Await: Promises ustida sintaktik shakar; bu yordamida asinxron kodni o'qilishi oson va sinxron tarzda yozish mumkin.
asyncbilan belgilangan funksiyalar doimo promise qaytaradi.awaitoperatori faqatasyncfunksiyalar ichida ishlatiladi va promise hal bo'lguncha bajarishni to'xtatadi.
Yondashuvlarni taqqoslash:
| Yondashuv | O'qilishi | Xatoliklarni boshqarish | Parallellik bajarilishi |
|---|---|---|---|
| Callbacks | Past | Murakkab | Nisbatan murakkab bo'lishi mumkin |
| Promises | O'rtacha | Quvvatli | .all(), .race() |
| Async/Await | Yuqori | Quvvatli (try/catch) | Biroz murakkablashadi |
Promises dan foydalanish misoli:
fetch('/api/data') // Asinxron operatsiya
.then(response => response.json()) // Muvaffaqiyatli ishlash
.then(data => console.log(data)) // Ma'lumotlarni qayta ishlash
.catch(error => console.error('Xato:', error)); // Xatolarni boshqarish
Async/Await dan foydalanish misoli:
async function fetchData() {
try {
const response = await fetch('/api/data'); // Promise kutish
const data = await response.json(); // Promise kutish
console.log(data);
} catch (error) {
console.error('Xato:', error); // Xatolarni boshqarish
}
}
fetchData();