1. Async/Await'in Sadece Söz Dizimi Olmadığını Anlamak
```javascript
async function fetchData() {
try {
const response = await fetch('https://api.example.com/data');
const data = await response.json();
console.log(data);
} catch (error) {
console.error("Veri alırken hata oluştu:", error);
}
}
```
Görüldüğü gibi, burada `await` anahtar kelimesi, verilerin yüklenmesini beklerken bloklama yapmadan çalışmamızı sağlıyor. Bu, Promise’lerin kullanımına göre çok daha okunabilir ve anlaşılır bir kod yapısı sunar.
2. Promise Zincirlemesi ile Async/Await Arasındaki Farklar
Promise Zincirleme Örneği:
```javascript
fetch('https://api.example.com/data')
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error(error));
```
Async/Await Örneği:
```javascript
async function fetchData() {
try {
const response = await fetch('https://api.example.com/data');
const data = await response.json();
console.log(data);
} catch (error) {
console.error(error);
}
}
```
Dikkat ettiyseniz, async/await ile kodun daha temiz ve anlaşılır olduğunu görebiliriz. Ayrıca, hata yönetimini de daha doğrudan bir şekilde yapabiliyoruz.
3. Performans Hataları ve Çözümleri
# Hatalı Kullanım:
async function fetchMultipleData() {
const data1 = await fetchData('https://api.example.com/data1');
const data2 = await fetchData('https://api.example.com/data2');
return [data1, data2];
}
```
Yukarıdaki kodda, her iki fetch çağrısı sırasıyla yapılır. Ancak bu, her bir istek için beklemek anlamına gelir, yani paralel işlem yapmadığınızı fark edebilirsiniz.
# Doğru Kullanım:
async function fetchMultipleData() {
const request1 = fetchData('https://api.example.com/data1');
const request2 = fetchData('https://api.example.com/data2');
const [data1, data2] = await Promise.all([request1, request2]);
return [data1, data2];
}
```
Bu şekilde, her iki istek paralel olarak başlatılır ve daha hızlı bir şekilde sonuçlanır. Bu tarz performans iyileştirmeleri, büyük veri setleriyle çalışırken ciddi farklar yaratabilir.
4. Async/Await Hataları ve Debugging İpuçları
- Uncaught SyntaxError: Genellikle `await` anahtar kelimesini yanlış bir yerde kullanmak bu hatayı tetikler. `await`, yalnızca `async` fonksiyonları içinde çalışır, bu yüzden fonksiyonu `async` olarak tanımladığınızdan emin olun.
```javascript
// Hatalı kullanım:
const data = await fetch('https://api.example.com/data'); // Bu doğru değil, fonksiyon async olmalı.
```
- Uncaught Promise Rejection: Hata yakalama işlemini ihmal etmek, programın beklenmedik şekilde çökmesine neden olabilir. `try/catch` blokları kullanarak hataları düzgün bir şekilde yakalayın.
```javascript
async function fetchData() {
try {
const response = await fetch('https://api.example.com/data');
if (!response.ok) {
throw new Error('Veri alınamadı!');
}
const data = await response.json();
return data;
} catch (error) {
console.error(error.message);
}
}
```
Bu örnekte, ağ hataları veya verinin işlenmesindeki problemleri düzgün bir şekilde yakalayabiliyoruz. Hata yönetimi, asenkron kodun en kritik noktalarından biridir, bu yüzden her zaman güvenli bir şekilde hata yakaladığınızdan emin olun.
---