1. Promise Zincirinde Unutulan `.catch()`
JavaScript’te asenkron bir işlem gerçekleştirdiğinizde, genellikle `Promise` kullanırız. Ancak, `.then()` blokları arasındaki hata yönetimi çoğu zaman gözden kaçabilir. Bu durumda, hata meydana geldiğinde hiçbir şey yapamazsınız ve programınız sessizce çöker.
Örnek bir senaryo düşünün:
fetch('https://api.example.com/data')
.then(response => response.json())
.then(data => {
console.log(data);
});
Eğer API isteği başarısız olursa, hata yönetimi eksik olur ve bu da uygulamanın sessizce hata vermesine neden olur. Peki ne yapmalıyız?
Çözüm: `.catch()` bloklarını ekleyerek hataları doğru bir şekilde yakalayın.
fetch('https://api.example.com/data')
.then(response => response.json())
.then(data => {
console.log(data);
})
.catch(error => {
console.error('Hata:', error);
});
Bu şekilde, API çağrılarında oluşan hataları düzgün bir şekilde yakalayabilir ve uygun önlemleri alabilirsiniz.
2. `async/await` Kullanırken Hatalı Hata Yakalama
`async/await` kullanmak, asenkron kodları daha okunabilir ve senkron bir şekilde yazmamıza olanak tanır. Ancak, hata yönetimi konusunda hala dikkat edilmesi gereken önemli noktalar vardır.
Örneğin, `await` kullandığınızda hataları `try...catch` bloğu içinde yakalamadığınız sürece, hata fırlatıldığında kodunuz çalışmayı durdurabilir.
Çözüm: `try...catch` blokları kullanarak hataları düzgün bir şekilde yönetin.
async function getData() {
try {
const response = await fetch('https://api.example.com/data');
const data = await response.json();
console.log(data);
} catch (error) {
console.error('Hata:', error);
}
}
Bu sayede, bir hata oluştuğunda programınız düzgün bir şekilde hata mesajı verecek ve işleyiş durmayacaktır.
3. `setTimeout` ve `setInterval` ile Zaman Hataları
Asenkron kod yazarken, zamanlayıcılar (`setTimeout` ve `setInterval`) kullanmak oldukça yaygındır. Ancak, zamanlayıcıların yanlış bir şekilde kullanılması programın beklediğiniz gibi çalışmamasına sebep olabilir.
Örneğin, `setTimeout` kullanarak bir işlem yapmak istediğinizde, zamanlamayı doğru ayarlamak çok önemlidir. Aksi takdirde, işlem çok erken veya çok geç tetiklenebilir.
Çözüm: Zamanlayıcıları doğru bir şekilde yerleştirerek, istediğiniz sonucu elde edebilirsiniz.
setTimeout(() => {
console.log('Bu mesaj 2 saniye sonra gösterilecek!');
}, 2000);
Burada, zamanlamanın doğru şekilde ayarlandığından emin olmalısınız. Ayrıca `setInterval` kullanımında da aynı hatayı yapmaktan kaçının.
4. Yanlış Yerleştirilmiş `return` İfadeleri
Asenkron fonksiyonlar, çoğu zaman bir işlem sonucunu döndürmek için `return` ifadesini kullanır. Ancak, özellikle `async` fonksiyonlarda `return` ifadesini doğru yerde kullanmak çok önemlidir. Yanlış bir yerleştirme, fonksiyonun beklenen sonucu döndürmemesine neden olabilir.
Çözüm: `return` ifadesinin doğru yerleştirildiğinden emin olun.
async function getData() {
const response = await fetch('https://api.example.com/data');
const data = await response.json();
return data; // Dönüş burada yapılmalı!
}
Burada, fonksiyonun sonucu doğru şekilde döndürmesi için `return` ifadesinin doğru konumda olduğuna dikkat edin.
5. Çoklu Asenkron İşlemde Sıralama Hataları
Birden fazla asenkron işlemde sıralama hataları, genellikle geliştiricilerin en sık karşılaştığı problemlerden biridir. Örneğin, birden fazla `fetch` isteği yapıyorsanız, bu isteklerin sırasını doğru yönetmezseniz, veriler karışabilir veya beklenmedik sonuçlar alabilirsiniz.
Çözüm: Asenkron işlemlerin sırasını düzgün bir şekilde yönetmek için `Promise.all()` veya `async/await` kombinasyonları kullanabilirsiniz.
async function fetchData() {
const data1 = await fetch('https://api.example.com/data1');
const data2 = await fetch('https://api.example.com/data2');
console.log(await data1.json(), await data2.json());
}
Bu şekilde, her iki isteği de doğru sırayla işleyebilirsiniz.
Sonuç
JavaScript’te asenkron programlama, geliştiricilere büyük esneklik sağlar ancak hatalarla dolu bir yolculuk olabilir. Ancak, yukarıda bahsettiğimiz hataları doğru bir şekilde ele alarak, daha verimli ve hatasız bir kod yazabilirsiniz. Unutmayın, her zaman hata yönetimi yaparak ve doğru yerleştirilmiş `return` ifadeleri ile güvenli bir yol izleyin. Kod yazarken her hatadan ders çıkarın ve her hatayı bir öğrenme fırsatı olarak değerlendirin.