CodeBlanks Logo Icon CodeBlanks

Unhandled rejection

Unhandled rejection ve uncaughtException öğrenirsin.

Unhandled rejection

Bir Promise reddedildiğinde ve ona .catch() bağlı değilse, unhandled rejection (yakalanmamış reddi) oluşur. Node.js bu durumu process.on("unhandledRejection", cb) olayıyla bildirir.

Örneğin Promise.reject(new Error("başarısız")) ve buna .catch() yoksa, unhandledRejection olayı ateşlenir. Callback, reddedilen değeri reason parametresiyle alır. Node.js 15+'da yakalanmamış reddi varsayılan olarak süreci sonlandırır; bu yüzden global bir işleyici tanımlamak önemlidir. reason.name ile hata türünü yazdırabilir, loglayabilir veya izleyebilirsin. Böylece uygulama sessizce çökmez; hata kayıt altına alınır.

uncaughtException

uncaughtException, senkron kodda try/catch ile yakalanmayan bir hatadır. process.on("uncaughtException", cb) ile dinlenir. Bu olay tetiklenince uygulama zaten kararsız durumdadır.

Örneğin throw new Error("boom") bir try/catch dışında fırlatılırsa, uncaughtException ateşlenir. Node.js bu olaydan sonra süreci sonlandırmayı önerir; çünkü uygulamanın durumu belirsizdir. Genellikle hata loglanır ve süreç yeniden başlatılır (örneğin PM2 veya systemd ile). unhandledRejection ise Promise reddileri içindir. Her ikisini de dinlemek, üretim uygulamalarında hataları kaybetmemek için önemlidir. Böylece izleme ve yeniden başlatma zinciri kurulur.

Uygulama unhandledRejection işleyicisi ekle

process.on("unhandledRejection", (reason) => { ... }) ile bir işleyici ekle; console.log(reason.name) yazdır. Promise.reject(new Error("test")) ile bir reddi tetikle. setTimeout(() => {}, 100) başlangıçta hazır.

Başlangıç kodu

index.js
// unhandledRejection işleyicisi ekle — reason.name yazdır
// buraya yaz

// Reddedilen bir promise oluştur
// buraya yaz

// İşleyicinin çalışması için bekle
setTimeout(() => {}, 100);

Örnek çözüm

index.js
process.on("unhandledRejection", (reason) => {
  console.log(reason.name);
});

Promise.reject(new Error("test"));

Beklenen çıktı

Error

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 unhandledRejection olayını tamamla

Soru
process.on("____", (reason) => { console.log(reason.name); });
Cevap
process.on("unhandledRejection", (reason) => { console.log(reason.name); });

Açıklama: unhandledRejection olayı Promise reddlerini yakalar.

2 Hangi olay yakalanmamış Promise reddini yakalar?

index.js
process.on("?", cb)
  • uncaughtException
  • exit
  • warning
  • unhandledRejection Doğru cevap

Açıklama: unhandledRejection, .catch() olmayan reddedilen promise'ler için ateşlenir.

3 Olayı kaynağına eşle

Kavram Anlamı
unhandledRejection Promise reddi
uncaughtException Senkron hata
process.on Olay dinler
setTimeout Bekleme sağlar

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