CodeBlanks Logo Icon CodeBlanks

Asenkron hata stratejileri

JavaScript kursu · Orta seviye · Ders 103/134

Promise ve async fonksiyonlarda farklı hata yakalama stratejilerini öğrenirsin.

async fonksiyonda try/catch

Bir async fonksiyonun içinde await ile beklenen bir promise reddedilirse hata try bloğunda yakalanır. Senkron koddaki try/catch ile aynı yapıyı kullanırsın.

async function loadProfile(id) {
  try {
    const profile = await fetchProfile(id);
    return profile;
  } catch (err) {
    console.error('Yükleme başarısız', err);
    return null;
  }
}

.catch zinciri mi, try/await mi?

Promise zincirinde .catch() hatayı yakalar. async fonksiyonda ise try/await/catch daha okunaklıdır. İkisi de aynı sonucu verir; kodun akışına göre birini seçersin.

// zincir yöntemi
fetchProfile(id).catch(err => logError(err));

// async yöntem
async function load() {
  try { await fetchProfile(id); }
  catch (err) { logError(err); }
}

Uygulama Asenkron ayar yükleme

loadSettings adlı async fonksiyon yaz. try bloğunda await fetchSettings() çağrısının sonucunu const settings değişkenine ata ve return settings ile döndür. catch (err) bloğunda console.error(err) çağrısı yapıp return null döndür.

Örnek çözümü göster
async function loadSettings() {
  try {
    const settings = await fetchSettings();
    return settings;
  } catch (err) {
    console.error(err);
    return null;
  }
}

Kendini test et

  1. Bir async fonksiyonda reddedilen promise nasıl yakalanır?

    • Yalnızca .then() ile
    • Yalnızca window.onerror ile
    • Yalnızca finally bloğu ile
    • await'i try bloğuna alıp catch ile
    Cevabı göster

    await'i try bloğuna alıp catch ile — Doğru! await'i try içine alıp catch ile yakalarsın.

  2. await ile çağır

    async function loadItem() {
      try {
        const item = ____ fetchItem();
        return item;
      } catch (err) {
        logError(err);
      }
    }
    Cevabı göster
    async function loadItem() {
      try {
        const item = await fetchItem();
        return item;
      } catch (err) {
        logError(err);
      }
    }
  3. Stratejileri kullanımlarla eşleştir

    try + await + catch
    async fonksiyonda hata
    .catch(handler)
    promise zincirinde hata
    .finally(fn)
    temizlik her durumda
    unhandledrejection
    yakalanmamış reddedilme

Orta seviye bölümündeki tüm dersler