Node.js
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.
Örnek çözümü göster
process.on("unhandledRejection", (reason) => {
console.log(reason.name);
});
Promise.reject(new Error("test"));
Kendini test et
-
unhandledRejection olayını tamamla
process.on("____", (reason) => { console.log(reason.name); });
Cevabı göster
process.on("unhandledRejection", (reason) => { console.log(reason.name); });
-
Hangi olay yakalanmamış Promise reddini yakalar?
process.on("?", cb)
- uncaughtException
- exit
- warning
- unhandledRejection
Cevabı göster
unhandledRejection — unhandledRejection, .catch() olmayan reddedilen promise'ler için ateşlenir.
-
Olayı kaynağına eşle
- unhandledRejection
- Promise reddi
- uncaughtException
- Senkron hata
- process.on
- Olay dinler
- setTimeout
- Bekleme sağlar
Sıradaki ders: Özet - Hata yönetimi