Asynchronous Function Timeout Nedir?
Timeout, bir işlemin belirli bir süre içinde tamamlanmadığı zaman sistemin bu işlemi iptal etmesi ya da hata vermesidir. Bu, özellikle veritabanı işlemleri, dış API çağrıları veya dosya okuma gibi uzun sürebilecek işlemler için sıkça karşılaşılan bir problemdir.
Timeout Hatasının Sebepleri
2. Yanıt Beklenmesi: Dış API'lere yapılan isteklerde genellikle bir yanıt beklenir. Eğer API yanıt vermezse, fonksiyon zaman aşımına uğrayabilir.
3. Yanlış Timeout Süresi Ayarlama: Bazen geliştiriciler, timeout süresini gereksiz yere düşük ayarlar ve bu da hataya neden olabilir.
Asynchronous Timeout Hatasının Çözümü
# 1. Timeout Süresini Artırmak
const timeout = 5000; // Timeout süresi 5 saniye
const promise = new Promise((resolve, reject) => {
setTimeout(() => {
resolve("İşlem tamamlandı!");
}, 10000); // 10 saniye süren bir işlem
});
Promise.race([
promise,
new Promise((_, reject) => setTimeout(() => reject("Zaman aşımı!"), timeout))
])
.then(result => console.log(result))
.catch(error => console.error(error));
Bu örnekte, `setTimeout` kullanarak bir işlem başlatıyoruz ve 10 saniye süren bir işlem yapılmasını bekliyoruz. Ancak, 5 saniyelik bir timeout süresi belirledik. Eğer işlem 5 saniye içinde tamamlanmazsa, `Zaman aşımı!` mesajı dönecek.
# 2. Asenkron İşlemi Optimize Etmek
# 3. Promise.all ile Birden Fazla İşlem Yönetmek
const fetchData = async () => {
const urls = ['url1', 'url2', 'url3'];
const promises = urls.map(url =>
new Promise((resolve, reject) => {
setTimeout(() => reject("Zaman aşımı!"), 5000);
fetch(url).then(resolve).catch(reject);
})
);
try {
const results = await Promise.all(promises);
console.log(results);
} catch (error) {
console.error(error);
}
};
fetchData();
Burada, her bir API çağrısı için 5 saniyelik bir timeout süresi belirledik. Eğer herhangi bir API 5 saniye içinde yanıt vermezse, işlem zaman aşımına uğrayacaktır.
# 4. Zaman Aşımı İçin Global Ayar Yapmak
const axios = require('axios');
axios.defaults.timeout = 5000; // Global timeout 5 saniye olarak ayarlandı
axios.get('https://some-api.com/data')
.then(response => console.log(response.data))
.catch(error => console.error('API çağrısı başarısız oldu', error));
Bu kodla, tüm API istekleriniz için geçerli olacak şekilde bir global timeout süresi belirledik.
Sonuç
Umarım bu yazı, karşılaştığınız zaman aşımı hatalarını çözmenizde size rehberlik eder. Unutmayın, yazılım dünyasında karşılaştığınız her hata, aslında daha iyi bir geliştirici olmanız için bir fırsattır. Şimdi zaman aşımına uğramadan kodunuzu çalıştırın ve projelerinizi başarıyla tamamlayın!