Unhandled rejection
- Node.js kursu
- Orta seviye
- Ders 80/116
- 5 dk
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
// 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
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
process.on("____", (reason) => { console.log(reason.name); });
process.on("unhandledRejection", (reason) => { console.log(reason.name); });
Açıklama: unhandledRejection olayı Promise reddlerini yakalar.
2 Hangi olay yakalanmamış Promise reddini yakalar?
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 |