Ancak bu yazıda, sadece async/await yapısını anlamaktan öteye gideceğiz. Hedefimiz, bu güçlü yapıyı kodunuzu daha verimli, hızlı ve okunabilir hale getirecek stratejilerle nasıl kullanabileceğinizi keşfetmek. O halde, JavaScript’in asenkron dünyasında kaybolmadan nasıl ilerleyeceğinizi gösterelim!
1. Promise.all ile Paralel Çalışan Asenkron Görevler
Asenkron işlemler genellikle sıralı olarak yapılır, ancak bazen işler birbiriyle paralel çalışabilir. Burada devreye Promise.all giriyor. Bu, birden fazla asenkron işlemi aynı anda başlatmanızı sağlar.
```javascript
const fetchData = async () => {
const userResponse = fetch('/user');
const postsResponse = fetch('/posts');
const [user, posts] = await Promise.all([userResponse, postsResponse]);
console.log(user, posts);
};
```
Bu yöntem, her iki isteği aynı anda başlatarak zaman kazandırır ve kodunuzu daha hızlı hale getirir.
2. Zaman Kaybını Engellemek İçin Doğru Kullanım
JavaScript'in asenkron yapısını doğru kullanmak, performansınızı artırmak için kritik önem taşır. await komutunu yalnızca gerçekten beklemeniz gereken yerlerde kullanın. Gereksiz await kullanımı, kodunuzu gereksiz yere yavaşlatabilir.
```javascript
const processData = async () => {
await fetchData();
await processInfo();
};
```
Burada await her iki fonksiyonu ardı ardına bekletiyor, oysa bu işlemler paralel yapılabilir.
3. Error Handling (Hata Yönetimi) İle Güvenli Kod
Asenkron kodun en büyük zorluklarından biri hata yönetimidir. Hatalar her zaman karşınıza çıkabilir ve bu hataları düzgün bir şekilde yakalamak, kodunuzun güvenliğini sağlar. try/catch bloğunu kullanarak hataları kolayca yönetebilirsiniz.
```javascript
const fetchData = async () => {
try {
const response = await fetch('/data');
const data = await response.json();
return data;
} catch (error) {
console.error('Veri çekme hatası:', error);
}
};
```
Bu şekilde, hatalarla başa çıkmak çok daha kolay ve kodunuz güvenli hale gelir.
4. Daha Temiz Kod İçin Async/Await ile Zamanlama
Asenkron kod yazarken, zamanlama önemli bir rol oynar. Kodunuzda birden fazla asenkron işlem varsa, bunları temiz bir şekilde sıralamak gerekir. setTimeout veya setInterval gibi zamanlayıcıları kullanarak işlemlerinizi daha etkili hale getirebilirsiniz.
```javascript
const delayedProcess = async () => {
console.log('İlk işlem başlatıldı');
await new Promise(resolve => setTimeout(resolve, 2000)); // 2 saniye bekle
console.log('İkinci işlem başlatıldı');
};
```
Bu yöntemle, işlemleri planlı bir şekilde yapabilirsiniz.
5. Promise.race ile İlk Tamamlanan Görevle Devam Etme
Promise.race, birden fazla asenkron işlemin en hızlı tamamlananını almanızı sağlar. Bu, bazı senaryolarda kodunuzu daha verimli hale getirebilir. Örneğin, birden fazla API’den veri alıyorsanız, ilk cevap veren API’yi kullanabilirsiniz.
```javascript
const fetchData = async () => {
const fetchPromise1 = fetch('/api/1');
const fetchPromise2 = fetch('/api/2');
const fastestResponse = await Promise.race([fetchPromise1, fetchPromise2]);
const data = await fastestResponse.json();
console.log(data);
};
```
Bu strateji, gereksiz beklemeleri engeller ve performansı artırır.
6. Async/Await ile Tekrarlanan Kodları Refaktör Edin
Async/await yapısı, kodunuzu daha temiz ve okunabilir hale getirmenize yardımcı olur. Tekrarlanan asenkron işlemleri, fonksiyonlar haline getirerek kod tekrarını azaltabilir ve bakımını kolaylaştırabilirsiniz.
```javascript
const fetchUser = async (userId) => {
const response = await fetch(`/user/${userId}`);
return response.json();
};
const fetchPosts = async (userId) => {
const response = await fetch(`/posts?userId=${userId}`);
return response.json();
};
const fetchData = async (userId) => {
const user = await fetchUser(userId);
const posts = await fetchPosts(userId);
return { user, posts };
};
```
Bu kodda, tekrar eden kod parçalarını fonksiyonlara dönüştürerek daha yönetilebilir hale getirdik.
7. Kodunuzu Asenkron Yapılarla Test Edin
Asenkron programlama yazarken, kodunuzu test etmek oldukça önemlidir. Bu süreç, kodunuzun doğru çalıştığını ve hataların hızlıca tespit edildiğini garantiler. jest gibi test araçlarını kullanarak, asenkron kodlarınızı test edebilirsiniz.
```javascript
test('fetchData returns user and posts', async () => {
const data = await fetchData(1);
expect(data.user).toBeDefined();
expect(data.posts).toBeDefined();
});
```
Bu şekilde, asenkron işlevlerinizi test ederek güvenli ve doğru sonuçlar elde edebilirsiniz.