Sobes.tech
Middle

Siz nəyi üstün tutursunuz: async/await yoxsa send?

sobes.tech Süni İntellekt

AI-dan cavab

Mən async/await istifadə etməyi üstün tuturam.

Üstünlüklər:

  • Oxunaqlıq: Kod sinxron kimi görünür, bu da məntiqin anlaşılmasını əhəmiyyətli dərəcədə asanlaşdırır, xüsusən də bir neçə asinxron əməliyyatla işləyərkən.
  • Callback hell-dən qaçınma: Callback-lərin iç-içə yerləşdirilməsini qarşısını alır, bu da kodun oxunmasını və saxlanmasını çətinləşdirə bilər.
  • Xəta idarəetməsi rahatlığı: Standart try...catch bloklarından istifadə edilə bilər.
  • Xarici alətlər üçün daha yaxşı dəstək: async/await ilə asinxron kodun debugging və profiling-i daha rahat olur.

send metodu (ehtimal ki, XMLHttpRequest obyektinin send metodu və ya <form>-un send metodu) məlumat göndərmək üçün istifadə olunur, lakin özü asinxronluğu idarə edən mexanizm deyil. send istifadə edilən sorğunun nəticəsi adətən hadisələr (onload, onerror və s.) vasitəsilə işlənir, bu da kodun callback-ə əsaslanan strukturuna gətirib çıxarır.

async/await ilə fetch kimi API-lərlə qarşılıqlı əlaqə daha təbii olur.

// async/await nümunəsi
async function fetchData(url) {
  try {
    const response = await fetch(url);
    if (!response.ok) {
      throw new Error(`HTTP xətası: ${response.status}`);
    }
    const data = await response.json();
    return data;
  } catch (error) {
    console.error("Məlumatların alınmasında xəta:", error);
    throw error; // Xətanı yuxarıya ötürürük
  }
}

// Asinxron funksiyanın istifadəsi
fetchData("https://api.example.com/data")
  .then(data => {
    console.log("Alınan məlumatlar:", data);
  })
  .catch(error => {
    console.error("Məlumatların işlənməsində xəta:", error);
  });

XMLHttpRequest və hadisələrlə işləmə ilə müqayisə:

// XMLHttpRequest və hadisələrlə nümunə (send istifadə ilə oxşar)
function fetchDataXHR(url, callback) {
  const xhr = new XMLHttpRequest();
  xhr.open("GET", url, true); // true sorğunu asinxron edir

  xhr.onload = function() {
    if (xhr.status >= 200 && xhr.status < 300) {
      try {
        const data = JSON.parse(xhr.responseText);
        callback(null, data); // callback-ə məlumatları ötürür
      } catch (error) {
        callback(error, null); // JSON parse xətası
      }
    } else {
      callback(new Error(`HTTP xətası: ${xhr.status}`), null); // HTTP xətası
    }
  };

  xhr.onerror = function() {
    callback(new Error("Şəbəkə xətası"), null); // Şəbəkə xətası
  };

  xhr.send(); // Sorğunu göndər
}

// Callback ilə istifadə
fetchDataXHR("https://api.example.com/data", function(error, data) {
  if (error) {
    console.error("Məlumatların alınmasında xəta:", error);
  } else {
    console.log("Alınan məlumatlar:", data);
  }
});

Əlbəttə, async/await versiyası daha qısa və oxumaq asandır.