CodeBlanks Logo Icon CodeBlanks

Hata yayılımı

JavaScript kursu · Orta seviye · Ders 101/134

Bir hatayı tekrar fırlatarak çağrı zincirinde yukarı taşınmasını öğrenirsin.

Hata yayılımı

Bir catch bloğunda hatayı çözemiyorsan throw err ile tekrar fırlatırsın. Hata, çağrı zincirinde bir üst katmana iletilir ve orada yakalanır. Bu davranışa hata yayılımı (error propagation) denir. Böylece her katman yalnızca çözebildiği hataları ele alır, gerisini üst katmana bırakır.

try {
  saveOrder(order);
} catch (err) {
  logError(err);
  throw err;
}

Hatayı cause ile sarmak

Tekrar fırlatırken özgün hatayı kaybetmemek için onu yeni bir hatanın cause seçeneğiyle sarabilirsin. Bu, hata ayıklamada kaynak hatayı korur ve bağlam ekler. Sarılan hatanın .cause özelliği üzerinden özgün hataya ulaşabilirsin.

try {
  fetchProfile(id);
} catch (err) {
  throw new Error('Profil yüklenemedi', { cause: err });
}

Uygulama Hatayı sar ve tekrar fırlat

saveOrder adlı fonksiyon order parametresi alsın. try bloğunda persist(order) çağrısı yapsın. catch bloğunda hatayı cause seçeneğiyle sarıp new Error('Sipariş kaydedilemedi', { cause: err }) biçiminde tekrar fırlatsın.

Örnek çözümü göster
function saveOrder(order) {
  try {
    persist(order);
  } catch (err) {
    throw new Error('Sipariş kaydedilemedi', { cause: err });
  }
}

Kendini test et

  1. Hatayı tekrar fırlat

    function safeSave(data) {
      try {
        persist(data);
      } catch (err) {
        ____ err;
      }
    }
    Cevabı göster
    function safeSave(data) {
      try {
        persist(data);
      } catch (err) {
        throw err;
      }
    }
  2. Bir catch bloğunda ne zaman hatayı tekrar fırlatmalısın?

    • Hatayı tamamen gizlemek istediğinde
    • Hatayı yerelde çözemediğinde, çağırana bırakmak için
    • Konsola yazdırıp geçmek istediğinde
    • Finally bloğunu atlamak istediğinde
    Cevabı göster

    Hatayı yerelde çözemediğinde, çağırana bırakmak için — Doğru! Çözemediğin hatayı tekrar fırlatmak çağırana bırakır.

  3. Yayılım kavramlarını eşleştir

    throw err
    Hatayı yukarı iletir
    cause: err
    Kaynak hatayı saklar
    catch (err)
    Hatayı yakalar
    finally
    Temizliği her durumda yapar

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