1. Callback Fonksiyonları ve Callback Hell
Örnek bir callback kullanımı şu şekilde görünebilir:
function firstFunction(callback) {
setTimeout(() => {
console.log("İlk işlem tamamlandı.");
callback();
}, 1000);
}
function secondFunction(callback) {
setTimeout(() => {
console.log("İkinci işlem tamamlandı.");
callback();
}, 1000);
}
firstFunction(() => {
secondFunction(() => {
console.log("Her şey tamam!");
});
});
Gördüğünüz gibi, bir işlem tamamlandığında ikinci işlem başlıyor. Fakat, iç içe geçen callback’ler, kodun yönetilmesini oldukça zorlaştırır.
2. Promises: Promise ve Async/Await Arasındaki Farklar
let promise = new Promise((resolve, reject) => {
let success = true;
if (success) {
resolve("İşlem başarıyla tamamlandı!");
} else {
reject("Bir hata oluştu!");
}
});
promise.then(result => {
console.log(result);
}).catch(error => {
console.log(error);
});
Async/Await ise, Promises yapısını daha anlaşılır kılar. `async` anahtar kelimesi fonksiyonun asenkron olduğunu belirtirken, `await` anahtar kelimesi Promise'lerin çözülmesini bekler. Bu yapı, asenkron kodu senkron kod gibi yazmanıza olanak tanır ve callback hell'den çok daha temiz bir çözüm sunar.
async function example() {
let result = await promise;
console.log(result);
}
example();
Bu sayede, işlemler sırayla ve anlaşılır bir şekilde yapılır. Kodun okunabilirliği artar ve hatalar daha kolay yakalanır.
3. Asenkron Programlamada En İyi Uygulamalar
- Promiseleri Zincirleme: Birden fazla asenkron işlemi zincirlemek, kodunuzu daha temiz hale getirir.
- Hata Yönetimi: Her zaman hataları düzgün bir şekilde yakalayın. `try/catch` blokları ve `.catch()` kullanmak, hataların nereden geldiğini anlamanızı kolaylaştırır.
- Paralel İşlemler: Eğer bağımsız işlemler varsa, onları paralel olarak çalıştırmak zaman kazandırır. Örneğin, `Promise.all()` veya `Promise.race()` kullanarak işlemleri eş zamanlı başlatabilirsiniz.
4. Asenkron Hataların Yönetimi: try/catch vs. .catch()
`try/catch` bloğu, `async` fonksiyonlarında kullanılır ve hataları yakalamak için en yaygın yöntemdir:
async function fetchData() {
try {
let response = await fetch('https://example.com');
let data = await response.json();
console.log(data);
} catch (error) {
console.log('Bir hata oluştu:', error);
}
}
Öte yandan, Promises ile `.catch()` yöntemi daha yaygın olarak kullanılır:
promise
.then(result => console.log(result))
.catch(error => console.log('Hata:', error));
5. Geleceğe Yönelik: Asenkron Yapılarla İlgili Yeni Özellikler
Sonuç
Yavaş yavaş asenkron yapılarla ilgili derinlemesine bir anlayışa sahip olduktan sonra, bu yeni beceriler web projelerinizi daha verimli hale getirecek. Kodunuzu basit tutarak, karmaşıklıktan kaçının ve JavaScript dünyasında güvenle ilerleyin!