Async/Await Nedir ve Neden Önemlidir?
Örneğin:
async function fetchData() {
try {
const response = await fetch('https://jsonplaceholder.typicode.com/users');
const users = await response.json();
console.log(users);
} catch (error) {
console.error('Hata:', error);
}
}
Bu örnekte, `fetchData` fonksiyonu asenkron bir işlev olarak tanımlanmış ve `await` kullanılarak verinin alınması beklenmiştir. Ancak, çoğu geliştirici bu yapıyı kullanırken bir takım hatalar yapabiliyor. Şimdi, bu hataları ve çözümlerini ele alalım.
1. Hata Yönetimi ve `try/catch` Kullanımı
async function getUserData() {
const response = await fetch('https://jsonplaceholder.typicode.com/users');
const data = await response.json();
return data;
}
getUserData().catch(error => {
console.error('Veri çekme hatası:', error);
});
Yukarıdaki örnekte, `catch` bloğu yalnızca promise hatalarını yakalar. Bu durumda, `try/catch` bloğunun içinde hata yönetimi yapmak çok daha doğru olacaktır. Örneğin:
async function getUserData() {
try {
const response = await fetch('https://jsonplaceholder.typicode.com/users');
const data = await response.json();
return data;
} catch (error) {
console.error('Veri çekme hatası:', error);
}
}
Bu yöntemle, asenkron işlem sırasında oluşabilecek tüm hatalar düzgün bir şekilde yakalanır ve size daha fazla kontrol imkanı tanır.
2. Birden Fazla Asenkron İşlem ve `Promise.all` Yanılgıları
async function fetchMultipleData() {
const userResponse = await fetch('https://jsonplaceholder.typicode.com/users');
const postResponse = await fetch('https://jsonplaceholder.typicode.com/posts');
const users = await userResponse.json();
const posts = await postResponse.json();
return { users, posts };
}
Bu işlem, her iki isteğin sırayla yapılmasına neden olur ve aslında her iki isteği aynı anda yapmanın çok daha verimli bir yolunu kaçırmış olursunuz. Bunun yerine, şu şekilde `Promise.all()` kullanarak her iki işlemi aynı anda başlatabilirsiniz:
async function fetchMultipleData() {
try {
const [userResponse, postResponse] = await Promise.all([
fetch('https://jsonplaceholder.typicode.com/users'),
fetch('https://jsonplaceholder.typicode.com/posts')
]);
const users = await userResponse.json();
const posts = await postResponse.json();
return { users, posts };
} catch (error) {
console.error('Veri çekme hatası:', error);
}
}
`Promise.all()`, her iki işlemi paralel olarak başlatır, böylece zaman kazancı sağlarsınız.
3. `await` ve `for` Döngüsü Yanılgıları
Yanlış kullanım:
async function processData() {
const data = [1, 2, 3, 4, 5];
for (let i = 0; i < data.length; i++) {
const result = await fetchData(data[i]);
console.log(result);
}
}
Bu kullanım, her bir asenkron işlemi sırayla yapar ve zaman kaybına yol açar. Bunun yerine, doğru kullanım şöyle olmalıdır:
async function processData() {
const data = [1, 2, 3, 4, 5];
const results = await Promise.all(data.map(item => fetchData(item)));
console.log(results);
}
Bu yöntemle, tüm işlemleri paralel olarak başlatır ve sonuçları bekledikten sonra elde edersiniz.
Sonuç
Umarım bu yazı, Async/Await ile çalışırken karşılaştığınız zorlukları aşmanıza yardımcı olur. Unutmayın, hata yapmak öğrenmenin bir parçasıdır ve her hata, sizi daha iyi bir geliştirici yapacak bir adımdır.