Sobes.tech
Middle

Шумо чӣ бештар дӯст медоред: async/await ё send?

sobes.tech AI

Ҷавоб аз AI

Манфиат мебинам, ки истифодаи async/await-ро дӯст медорам.

Афзалиятҳо:

  • Дидбонӣ: Код ба назар мерасад, ки ҳамчун синхронӣ аст, ки фаҳмиши логикаро ба таври назаррас осон мекунад, махсусан дар кор бо чандин амалиёти асинхронӣ.
  • Нобуд кардани callback hell: Аз вурудоти callback-ҳо, ки метавонанд кодро душвор барои хондан ва нигоҳдорӣ гардонанд, пешгирӣ мекунад.
  • Коркарди хатоҳо қулай: Мумкин аст, ки блокҳои try...catch-ро барои коркарди хатоҳо дар кодҳои асинхронӣ истифода бурд.
  • Дастгирии беҳтари воситаҳои хориҷӣ: Дебаггинг ва профилинг кардани коди асинхронӣ бо async/await одатан қулайтар аст.

Метод send (ки эҳтимолан ба методи send-и объект XMLHttpRequest ё <form> дахл дорад) барои фиристодани маълумот истифода мешавад, аммо худи он механизми идоракунии асинхронӣ нест. Натиҷаи дархост бо истифода аз send одатан тавассути ҳодисаҳо (onload, onerror ва ғайра) коркард мешавад, ки ба сохтори коди callback-ориентед оварда мерасонад.

Бо async/await ҳамкорӣ бо API-ҳои асинхронӣ, монанди fetch, ба назар осонтар мешавад.

// Мисол бо async/await
async function fetchData(url) {
  try {
    const response = await fetch(url);
    if (!response.ok) {
      throw new Error(`Хатои HTTP: ${response.status}`);
    }
    const data = await response.json();
    return data;
  } catch (error) {
    console.error("Хатои дарёфти маълумот:", error);
    throw error; // Нақл кардани хато ба боло
  }
}

// Истифодаи функсияи асинхронӣ
fetchData("https://api.example.com/data")
  .then(data => {
    console.log("Маълумотҳои дарёфтшуда:", data);
  })
  .catch(error => {
    console.error("Хатои коркарди маълумот:", error);
  });

Мувофиқати бо XMLHttpRequest ва коркард тавассути ҳодисаҳо:

// Мисол бо XMLHttpRequest ва ҳодисаҳо (монанд ба истифодаи send)
function fetchDataXHR(url, callback) {
  const xhr = new XMLHttpRequest();
  xhr.open("GET", url, true); // true дархостро асинхрон мекунад

  xhr.onload = function() {
    if (xhr.status >= 200 && xhr.status < 300) {
      try {
        const data = JSON.parse(xhr.responseText);
        callback(null, data); // додаҳоро ба callback мефиристад
      } catch (error) {
        callback(error, null); // хато дар парсинги JSON
      }
    } else {
      callback(new Error(`Хатои HTTP: ${xhr.status}`), null); // хато дар HTTP
    }
  };

  xhr.onerror = function() {
    callback(new Error("Хатои шабакавӣ"), null); // хати шабакавӣ
  };

  xhr.send(); // фиристодани дархост
}

// Истифодаи callback
fetchDataXHR("https://api.example.com/data", function(error, data) {
  if (error) {
    console.error("Хатои дарёфти маълумот:", error);
  } else {
    console.log("Маълумотҳои дарёфтшуда:", data);
  }
});

Шароитан, версияи бо async/await кӯтоҳтар ва осонтар хонда мешавад.