Sobes.tech
Middle

Siz nima afzal ko'rasiz: async/await yoki send?

sobes.tech AI

AIdan javob

Men async/await ishlatishni afzal ko'raman.

Afzalliklar:

  • O'qilishi: Kod sinxron kabi ko'rinadi, bu esa mantiqni tushunishni sezilarli darajada osonlashtiradi, ayniqsa bir nechta asinxron operatsiyalar bilan ishlaganda.
  • Callback helldan qochish: Callbacklarning ichma-ich joylashishini oldini oladi, bu kodni o'qish va saqlashni qiyinlashtirishi mumkin.
  • Xatoliklarni qulay boshqarish: Standart try...catch bloklarini asinxron kodda xatoliklarni boshqarish uchun ishlatish mumkin.
  • Tashqi vositalar uchun yaxshiroq qo'llab-quvvatlash: async/await bilan asinxron kodni debugging va profiling qilish ko'pincha qulayroq bo'ladi.

send metodi (ehtimol XMLHttpRequest obyekti yoki <form> ning send metodi) ma'lumot yuborish uchun ishlatiladi, lekin u asinxronlikni boshqarish mexanizmi emas. send yordamida so'rov natijasi odatda voqealar (onload, onerror va boshqalar) orqali ishlanadi, bu esa kodni callbackga asoslangan tuzilishga olib keladi.

async/await bilan fetch kabi API lar bilan ishlash tabiiyroq bo'ladi.

// async/await bilan misol
async function fetchData(url) {
  try {
    const response = await fetch(url);
    if (!response.ok) {
      throw new Error(`HTTP xatosi: ${response.status}`);
    }
    const data = await response.json();
    return data;
  } catch (error) {
    console.error("Ma'lumotlarni olishda xato:", error);
    throw error; // Xatoni yuqoriga uzatish
  }
}

// Asinxron funksiyani ishlatish
fetchData("https://api.example.com/data")
  .then(data => {
    console.log("Olingan ma'lumotlar:", data);
  })
  .catch(error => {
    console.error("Ma'lumotlarni ishlashda xato:", error);
  });

XMLHttpRequest va voqealar bilan ishlashga taqqoslaganda:

// XMLHttpRequest va voqealar bilan misol (send bilan o'xshash)
function fetchDataXHR(url, callback) {
  const xhr = new XMLHttpRequest();
  xhr.open("GET", url, true); // true asinxron so'rov

  xhr.onload = function() {
    if (xhr.status >= 200 && xhr.status < 300) {
      try {
        const data = JSON.parse(xhr.responseText);
        callback(null, data); // callbackga ma'lumotlarni uzatish
      } catch (error) {
        callback(error, null); // JSON parsing xatosi
      }
    } else {
      callback(new Error(`HTTP xatosi: ${xhr.status}`), null); // HTTP xatosi
    }
  };

  xhr.onerror = function() {
    callback(new Error("Tarmoq xatosi"), null); // Tarmoq xatosi
  };

  xhr.send(); // so'rov yuborish
}

// callback bilan foydalanish
fetchDataXHR("https://api.example.com/data", function(error, data) {
  if (error) {
    console.error("Ma'lumotlarni olishda xato:", error);
  } else {
    console.log("Olingan ma'lumotlar:", data);
  }
});

Albatta, async/await bilan versiya ko'proq qisqa va o'qilishi oson.