Sobes.tech
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. async bilan belgilangan funksiyalar doimo promise qaytaradi. await operatori faqat async funksiyalar 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();