1. API Yanıtını Beklerken Zaman Aşımı Sorunları
Çözüm: API bağlantılarına zaman aşımı süresi eklemek önemlidir. `Promise.race()` gibi bir yaklaşım kullanarak, birden fazla asenkron işlemle aynı anda yarışan işlemler oluşturabilirsiniz. Bu, en hızlı yanıtı almanıza yardımcı olur ve zaman aşımı hatalarını minimize eder.
const fetchData = async () => {
const timeout = new Promise((_, reject) => setTimeout(() => reject('Zaman Aşımı!'), 5000));
const apiResponse = fetch('https://api.example.com/data');
try {
const data = await Promise.race([apiResponse, timeout]);
const responseData = await data.json();
console.log(responseData);
} catch (error) {
console.error(error);
}
};
2. Yanıt Verisi ile İlgili Tip Hataları
Çözüm: API'den gelen yanıtın doğru formatta olup olmadığını kontrol etmek için tür doğrulaması yapın. Ayrıca, veri işlemeye başlamadan önce yanıtı detaylıca inceleyin.
const fetchData = async () => {
try {
const response = await fetch('https://api.example.com/data');
const data = await response.json();
if (typeof data !== 'object' || !data.hasOwnProperty('requiredField')) {
throw new Error('Yanıt formatı hatalı');
}
console.log(data);
} catch (error) {
console.error('Hata:', error.message);
}
};
3. API Hatalarını Yetersiz Ele Alma
Çözüm: API yanıtını aldıktan sonra, sadece yanıt verisini değil, aynı zamanda HTTP durum kodunu da kontrol edin. Bu, hataları yönetmek için çok önemlidir.
const fetchData = async () => {
try {
const response = await fetch('https://api.example.com/data');
if (!response.ok) {
throw new Error(`API hatası: ${response.status}`);
}
const data = await response.json();
console.log(data);
} catch (error) {
console.error('Hata:', error.message);
}
};
4. Yanıtı Paralel Olarak İşleme Hataları
Çözüm: Birden fazla asenkron işlemi senkronize bir şekilde çalıştırmak için `Promise.all()` veya `Promise.allSettled()` gibi yöntemler kullanın. Bu, işlemlerin tamamlanmasını beklerken, hata yönetimini de düzgün yapmanıza yardımcı olur.
const fetchMultipleData = async () => {
try {
const [data1, data2] = await Promise.all([
fetch('https://api.example.com/data1').then(res => res.json()),
fetch('https://api.example.com/data2').then(res => res.json())
]);
console.log(data1, data2);
} catch (error) {
console.error('Hata:', error.message);
}
};
5. Hata Mesajlarının Kullanıcıya Anlatılabilir Olmaması
Çözüm: Hata mesajlarını daha kullanıcı dostu hale getirin. Teknik detaylardan ziyade, kullanıcının ne yapması gerektiğini anlatan açıklamalar ekleyin.
const fetchData = async () => {
try {
const response = await fetch('https://api.example.com/data');
if (!response.ok) {
throw new Error('Bir hata oluştu. Lütfen daha sonra tekrar deneyin.');
}
const data = await response.json();
console.log(data);
} catch (error) {
alert(error.message); // Kullanıcı dostu hata mesajı
}
};