Asynchronous Function Timeout Nedir?
Hata Nasıl Görünür?
```
Error: Timeout of X ms exceeded
```
Buradaki `X`, işlemin tamamlanması gereken süredir. Eğer bu süre aşılırsa, hata mesajı devreye girer ve işlem durur. İşte bu noktada hemen ne yapmanız gerektiğini öğrenmeniz lazım!
Çözüm: Asenkron Fonksiyonun Timeout Hatasını Gidermek
1. Timeout Süresini Artırma
Eğer asenkron işleminizin tamamlanması gerçekten uzun sürecekse, o zaman timeout süresini arttırabilirsiniz. Bu, özellikle dış API çağrıları yaparken faydalıdır. Aşağıdaki örnekte bir API çağrısı yaparken timeout süresinin nasıl arttırılacağına bakacağız:
const axios = require('axios');
// Timeout süresi 10 saniye olarak ayarlandı
axios.get('https://someapi.com/data', { timeout: 10000 })
.then(response => {
console.log(response.data);
})
.catch(error => {
if (error.code === 'ECONNABORTED') {
console.log('Request Timeout!');
} else {
console.log('Other Error: ', error.message);
}
});
Burada, `timeout: 10000` parametresi ile işlemin 10 saniye içinde tamamlanmasını bekliyoruz. Bu sürenin aşılması durumunda `ECONNABORTED` hatasını yakalıyoruz. Bu tür bir çözüm, özellikle dış API'lerle çalışırken oldukça faydalıdır.
2. Promise Kullanarak Timeout Yönetimi
Node.js’de asenkron fonksiyonlar çoğunlukla `Promise` yapılarıyla yönetilir. Bir işlem için özel bir timeout yönetimi eklemek istiyorsanız, aşağıdaki gibi bir yapıyı kullanabilirsiniz:
function fetchDataWithTimeout(url, timeout) {
return new Promise((resolve, reject) => {
const timeoutId = setTimeout(() => reject(new Error('Request Timeout')), timeout);
fetch(url)
.then(response => {
clearTimeout(timeoutId);
resolve(response);
})
.catch(err => {
clearTimeout(timeoutId);
reject(err);
});
});
}
fetchDataWithTimeout('https://someapi.com/data', 5000)
.then(data => console.log('Data:', data))
.catch(err => console.log('Error:', err));
Bu çözümde, timeout süresi geldiğinde otomatik olarak bir hata fırlatılır ve `Promise` zinciri üzerinden işlem yönetilir. Bu yöntemi kullanarak daha özelleştirilmiş timeout senaryoları oluşturabilirsiniz.
3. Asenkron İşlemlerin Paralel Çalıştırılması
Eğer çok sayıda asenkron işlemi paralel bir şekilde çalıştırıyorsanız, her birinin timeout süresini kontrol etmek ve yönetmek önemli olacaktır. Bu durumda, her işlemi tek tek kontrol edebilir ve timeout değerlerini belirleyebilirsiniz. İşte bununla ilgili bir örnek:
async function fetchMultipleData(urls, timeout) {
const promises = urls.map(url => fetchDataWithTimeout(url, timeout));
try {
const results = await Promise.all(promises);
console.log('All data:', results);
} catch (error) {
console.error('One or more requests failed:', error.message);
}
}
const urls = ['https://someapi.com/data1', 'https://someapi.com/data2'];
fetchMultipleData(urls, 5000);
Burada, `fetchMultipleData` fonksiyonu, birden fazla API çağrısını paralel olarak başlatır ve her bir çağrının belirli bir timeout süresi içinde tamamlanıp tamamlanmadığını kontrol eder.
Sonuç:
Umarım bu yazı, Node.js ile asenkron fonksiyonlarda timeout hatasıyla başa çıkmanıza yardımcı olur. Kodunuzu güvenle yazın ve hatalarla mücadele etmeyi unutmayın!