Unhandled Promise Rejection Hatası Nedir?
Daha basit bir şekilde açıklayalım. Diyelim ki, bir API'den veri çekiyorsunuz. Eğer bir şeyler ters giderse ve bu durumu catch ile yakalamazsanız, Node.js size bu hatayı gösterir.
Örneğin, aşağıdaki gibi bir kod düşünün:
const getUserData = new Promise((resolve, reject) => {
reject("Bir şeyler ters gitti!");
});
getUserData.then((data) => {
console.log(data);
});
Burada, `reject()` ile bir hata tetikledik ama bu hatayı catch ile yakalamadık. Bu durumda, Node.js hemen devreye girer ve "Unhandled Promise Rejection" hatasını verir.
Neden Bu Hata Karşımıza Çıkıyor?
Bu hatayı göz ardı ederseniz, potansiyel olarak veri kaybına veya uygulamanızda beklenmedik sonuçlara yol açabilir. Ayrıca, birden fazla promise ile çalışırken bu tür hatalar daha karmaşık sorunlara neden olabilir.
Unhandled Promise Rejection Hatasını Çözmek İçin Adımlar
# 1. Catch Kullanarak Hataları Yakalayın
getUserData
.then((data) => {
console.log(data);
})
.catch((error) => {
console.error("Bir hata oluştu: ", error);
});
Burada, `.catch()` yöntemi promise’in reddedildiği durumda devreye girer ve hata mesajını yazdırır. Bu, hata yönetimini düzgün bir şekilde yapmanıza olanak sağlar.
# 2. Async/Await ve Try-Catch Blokları Kullanmak
async function getUserDataAsync() {
try {
const data = await getUserData;
console.log(data);
} catch (error) {
console.error("Bir hata oluştu: ", error);
}
}
getUserDataAsync();
Burada, `await` ifadesi promise’in tamamlanmasını bekler. Eğer bir hata oluşursa, `catch` bloğu devreye girer.
# 3. Global Hata Yakalama
process.on('unhandledRejection', (error) => {
console.error("Unhandled Promise Rejection:", error);
});
Bu kodu, Node.js uygulamanızın en başına eklediğinizde, tüm unhandled promise rejection hataları yakalanacak ve size bildirilecektir. Ancak, bu sadece hata bildirmekle kalmaz; catch kullanımı hala en sağlıklı çözüm olacaktır.
# 4. Node.js Konfigürasyonu ile Çözüm
- strict: Hatalar, programın hemen kapanmasına neden olur.
- warn: Hatalar yalnızca bir uyarı olarak gösterilir.
- none: Hatalar gösterilmez.
Örneğin, `strict` modunda hata meydana geldiğinde Node.js hemen programınızı sonlandırır.
Aşağıdaki gibi çalıştırarak bu özelliği ayarlayabilirsiniz:
node --unhandled-rejections=strict app.js
Sonuç
Eğer bir daha karşılaşırsanız, hatayı düzgün bir şekilde yakalayarak uygulamanızın sağlıklı çalışmasını sağlayın. İyi bir hata yönetimi, her zaman yazılım geliştirmenin önemli bir parçasıdır.