Asenkron Programlamaya Giriş
Ancak, asenkron programlamada işler biraz karmaşıklaşabiliyor. Çünkü birden fazla asenkron işlemi aynı anda yönetmek ve sonuçlarını doğru bir şekilde işlemek önemli bir konu.
Callback Fonksiyonları: Eski Okul, Ama Hala Güçlü
Örnek Callback Kullanımı:
function veriCek(callback) {
setTimeout(() => {
console.log("Veri çekildi!");
callback(); // Callback fonksiyonu çağrılıyor
}, 2000);
}
veriCek(() => {
console.log("Callback fonksiyonu çalıştı.");
});
Görüyoruz ki callback kullanımı oldukça basit ve anlaşılır. Ancak, callback fonksiyonlarıyla çalışırken callback hell adı verilen karmaşıklıkla karşılaşabilirsiniz. Birçok callback iç içe geçtiğinde, kodun okunabilirliği ve yönetilmesi zorlaşır. Bu yüzden, daha modern çözümler aramak gerekebilir.
Promises: Kod Okunabilirliği Artıyor
Promise Kullanımı:
function veriCek() {
return new Promise((resolve, reject) => {
setTimeout(() => {
const veri = "Veri çekildi!";
const hata = false;
if (!hata) {
resolve(veri);
} else {
reject("Hata oluştu!");
}
}, 2000);
});
}
veriCek()
.then((veri) => {
console.log(veri); // Veri çekildi!
})
.catch((hata) => {
console.log(hata); // Hata oluştu!
});
Burada then metoduyla işlemin başarılı olması durumunda yapılacakları, catch metoduyla ise hata durumunda yapılacakları belirtiyoruz. Promises kullanmak, kodun anlaşılabilirliğini artırır ve callback hell problemini çözer.
Async/Await: Modern Asenkron Programlamanın Zirvesi
Async/Await Kullanımı:
async function veriCek() {
const veri = await new Promise((resolve, reject) => {
setTimeout(() => {
const veri = "Veri çekildi!";
resolve(veri);
}, 2000);
});
console.log(veri); // Veri çekildi!
}
veriCek();
Yukarıdaki örnekte görüldüğü gibi, await anahtar kelimesi ile Promise'in sonucunu bekliyoruz. Kodun geri kalanı sanki senkron bir işlem gibi çalışıyor, ancak arka planda asenkron işlemler gerçekleşiyor.
Hangi Durumda Hangi Yöntemi Kullanmalısınız?
- Callbacks: Eğer sadece basit bir asenkron işlem yapıyorsanız ve iç içe callback'ler ile karmaşıklığa girmiyorsanız, callback kullanabilirsiniz. Ancak, ilerleyen zamanlarda kod karmaşıklaştığında sorun yaşamanız kaçınılmaz olabilir.
- Promises: Callback hell'den kurtulmak istiyorsanız ve işlemlerinizin sonucuna göre çeşitli durumları yönetmek istiyorsanız, promises daha uygun olacaktır.
- Async/Await: Eğer kodunuzu daha temiz, okunabilir ve senkron gibi yazmak istiyorsanız, async/await en ideal seçimdir. Asenkron işlemleri zincirleme yaparak yönetmek istediğinizde de çok kullanışlıdır.
Sonuç: Modern JavaScript için Asenkron Programlama
Unutmayın, her bir yöntem kendi içinde güçlüdür ve doğru senaryolarda kullanıldığında harikalar yaratabilir. Eğer amacınız hem güçlü hem de temiz bir kod yazmaksa, Async/Await'i şiddetle öneririm.