1. Asenkron Programlamanın Temellerini Anlamadan Başlamak
İpucu: Asenkron kod yazarken her zaman olay döngüsünü ve çağrı kuyruğunu düşünün. Kodunuzu yazmadan önce temel asenkron yapılar hakkında bilgi edinmek, hata yapmanızı engelleyecektir.
2. Callback Hell (Geribildirim Cehennemi)
Çözüm: Bu sorunu önlemek için Promise ya da async/await kullanmayı deneyin. Bu yapılar, kodunuzu daha temiz ve yönetilebilir kılacaktır.
```javascript
// Callback Hell Örneği
function getData(callback) {
setTimeout(() => {
callback('Veri alındı');
}, 1000);
}
getData((message) => {
console.log(message);
});
```
Alternatif: Promise Kullanımı
```javascript
function getData() {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve('Veri alındı');
}, 1000);
});
}
getData().then((message) => {
console.log(message);
});
```
3. Hatalı Promise Zincirleri
İpucu: finally() kullanarak, hata yönetimini düzgün bir şekilde yapın ve her durumda işlem yapılmasını sağlayın.
```javascript
function fetchData() {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve("Veri başarılı şekilde alındı");
}, 1000);
});
}
fetchData()
.then((data) => console.log(data))
.catch((error) => console.error(error))
.finally(() => console.log('Veri alma işlemi tamamlandı.'));
```
4. Async/Await Kullanırken Dikkat Edilmesi Gereken Tuzaklar
İpucu: `await` sadece `async` fonksiyonları içinde kullanılabilir. Ayrıca, `await` kullanırken hata yönetimine dikkat etmek gerekir.
```javascript
// Async/Await ile doğru kullanım
async function fetchData() {
try {
let data = await getData();
console.log(data);
} catch (error) {
console.error("Bir hata oluştu:", error);
}
}
```
5. Hata Yönetimi (Error Handling) ile İlgili Yapılan Yanlışlar
İpucu: try/catch bloklarını kullanarak, asenkron fonksiyonlarda oluşabilecek hataları etkili bir şekilde yönetin.
```javascript
async function getData() {
throw new Error("Bir şeyler ters gitti!");
}
async function main() {
try {
await getData();
} catch (error) {
console.log("Hata:", error.message);
}
}
```
6. Paralel İşlemeyi Yanlış Kullanmak
İpucu: Promise.all() ve Promise.allSettled() gibi araçları kullanarak paralel işlemleri doğru şekilde yönetin.
```javascript
async function fetchDataFromAPI() {
const [data1, data2] = await Promise.all([apiCall1(), apiCall2()]);
console.log(data1, data2);
}
```
7. Performans Sorunları ve Çözüm Önerileri
İpucu: Gereksiz asenkron işlemleri minimize edin ve asenkron işlerinizi doğru sırayla planlayın. Ayrıca, büyük verileri işlerken, işlemleri küçük parçalara ayırmayı unutmayın.
```javascript
// Yavaş veri işlemesi yerine
for (let i = 0; i < largeDataSet.length; i++) {
await processItem(largeDataSet[i]);
}
// Bu şekilde daha verimli paralel işlem yapılabilir
await Promise.all(largeDataSet.map(item => processItem(item)));
```