JavaScript Asenkron Programlaması: Callbacks, Promises ve Async/Await Arasındaki Farklar ve Hangisini Ne Zaman Kullanmalıyız?

JavaScript Asenkron Programlaması: Callbacks, Promises ve Async/Await Arasındaki Farklar ve Hangisini Ne Zaman Kullanmalıyız?

JavaScript'in asenkron programlama tekniklerini anlamak, projelerde verimliliği artırmanın anahtarıdır. Bu yazıda, Callbacks, Promises ve Async/Await arasındaki farkları ve her birinin ne zaman kullanılması gerektiğini detaylı bir şekilde keşfedeceksiniz.

BFS

Asenkron Programlamaya Genel Bakış



Bir yazılım geliştiricisi olarak, çoğu zaman işlerimizi hızlandırmak ve kullanıcı deneyimini iyileştirmek için hızlı yanıtlar ve etkili çözüm yolları ararız. Ancak, zaman alıcı işlemlerle karşılaştığımızda, JavaScript’te asenkron programlama devreye girer. Peki, asenkron programlama nedir?

JavaScript'in çalışma mekanizması, geleneksel senkron programlamadan farklı olarak, asenkron yapılarla işlem yaparak kullanıcıların beklemek zorunda kalmasını engeller. Bu, özellikle ağ istekleri, dosya okuma ve veri tabanı işlemleri gibi uzun süren işlemlerde oldukça önemlidir. Ancak bu noktada asenkron programlamada nasıl bir yol izleyeceğiniz büyük önem taşır. İşte tam burada Callbacks, Promises ve Async/Await devreye giriyor!

Callbacks: Asenkron Programlamanın İlk Adımı



JavaScript’te asenkron programlama dendiğinde akla ilk gelen şeylerden biri callback fonksiyonlarıdir. Callbacks, genellikle bir işlem tamamlandığında başka bir fonksiyonun çalışmasını sağlamak için kullanılır. Yani, bir işlemi başlattığınızda, onun bitmesini beklemek yerine işlerinizi diğer işlemlerle paralel olarak sürdürebilirsiniz.

Örnek Callback Kullanımı:


function veriYukle(callback) {
  setTimeout(() => {
    console.log("Veri Yüklendi");
    callback(); // Callback fonksiyonunu çağır
  }, 2000);
}

veriYukle(function() {
  console.log("Callback çalıştı");
});


Buradaki örnekte, `setTimeout` fonksiyonu simüle edilmiş bir veri yükleme işlemidir. İki saniye sonra `callback` fonksiyonu çağrılır. Ancak, callback'ler büyüdükçe işler karmaşıklaşabilir ve "callback hell" yani callback cehennemi gibi sorunlar ortaya çıkabilir. Bu sorun, birbirine iç içe geçmiş callback'lerin kodun okunabilirliğini zorlaştırmasıyla ilgilidir.

Promises: Callbacks'tan Sonra Gelen Kurtuluş



Eğer callback’ler karmaşıklaşmaya ve okunması zor hale gelmeye başlamışsa, o zaman Promises devreye girer. Promise, daha temiz bir yapı sunar ve özellikle hata yönetimi konusunda faydalıdır.

Promise Nedir?

Promise, bir işlemin sonucunun gelecekte elde edileceğini ifade eden bir JavaScript nesnesidir. Ya işlemin başarılı bir şekilde tamamlanacağına dair bir çözüm (resolve) ya da bir hata ile karşılaşılacağına dair bir neden (reject) döner. Promise, callback’lere göre çok daha okunabilir ve yönetilebilir bir yapıdır.

Promise Kullanımı:


function veriYukle() {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      const veri = "Veri Yüklendi";
      console.log(veri);
      resolve(veri); // Promise'i başarıyla tamamla
    }, 2000);
  });
}

veriYukle().then((veri) => {
  console.log("Veri İşlendi:", veri);
}).catch((hata) => {
  console.log("Hata:", hata);
});


Promise yapısı ile işlem tamamlandığında ne olacağı çok daha kolay bir şekilde belirlenebilir. Bu da kodun anlaşılabilirliğini ve bakımını çok daha kolay hale getirir. Ancak, büyük projelerde bazen birkaç Promise zincirlemesi yapmak zorunda kalırsınız, bu da yine kodu karmaşıklaştırabilir.

Async/Await: En Modern ve Okunabilir Yöntem



Ve işte JavaScript'teki en son yenilik olan Async/Await. Promise’leri daha basit ve okunabilir bir hale getiren bu yöntem, asenkron işlemleri senkron gibi yazmanıza olanak tanır. Async/Await, JavaScript'teki asenkron kodu yazmayı kolaylaştırarak, geliştiricilerin daha az karmaşık kodlar yazmasını sağlar.

Async/Await Kullanımı:


async function veriYukle() {
  return new Promise((resolve) => {
    setTimeout(() => {
      const veri = "Veri Yüklendi";
      console.log(veri);
      resolve(veri);
    }, 2000);
  });
}

async function main() {
  try {
    const veri = await veriYukle(); // await ile işlem bekleniyor
    console.log("Veri İşlendi:", veri);
  } catch (hata) {
    console.log("Hata:", hata);
  }
}

main();


`async` anahtar kelimesi fonksiyonun asenkron çalışmasını sağlarken, `await` anahtar kelimesi işlemi bekler ve sonucu alır. Bu şekilde asenkron kod yazmak, daha okunabilir ve hata yönetimi açısından çok daha etkili hale gelir.

Hangi Yöntem Ne Zaman Kullanılmalı?



Callbacks, genellikle basit ve kısa süreli asenkron işlemler için kullanılır. Ancak kodun büyümesiyle birlikte callback hell gibi sorunlarla karşılaşabilirsiniz.

Promises ise callback hell'den kaçınmak için daha uygun bir çözümdür. Ancak birden fazla işlemi sırayla yapmanız gerektiğinde, Promise zincirleriyle uğraşmak zor olabilir.

Async/Await ise, asenkron işlemleri daha okunabilir ve yönetilebilir hale getirdiği için modern JavaScript uygulamalarında en popüler ve yaygın yöntemdir.

Sonuç: Hangisini Seçmeli?



Eğer basit bir asenkron işlem yapıyorsanız, callback kullanabilirsiniz. Ancak, daha karmaşık işlemlerle karşılaştığınızda Promises size daha fazla esneklik sunar. En nihayetinde, Async/Await her zaman okunabilirlik ve bakım açısından en iyi seçenektir.

Asenkron programlama dünyası bazen karmaşık olabilir, ancak doğru aracı seçmek işlerinizi kolaylaştırır. Artık Callbacks, Promises ve Async/Await arasındaki farkları biliyorsunuz, bir sonraki projenizde hangisini kullanacağınıza karar vermek tamamen sizin elinizde!

İlgili Yazılar

Benzer konularda diğer yazılarımız

Gizli Hızlandırıcılar: Web Siteniz İçin En İyi JavaScript Performans İpuçları

Web geliştiriciliği, özellikle hız ve performans konusunda sürekli bir yarışa dönüşmüş durumda. Kullanıcılar sabırsızdır, hız önemli, SEO daha da önemli. Her geçen gün daha hızlı, daha verimli web siteleri oluşturmak için yeni yöntemler ve teknikler aranıyor....

JavaScript Asenkron Programlamada Unutulan 5 Yaygın Hata ve Çözüm Yolları

Bir gün, JavaScript ile çalışan genç bir yazılımcı olan Ali, bir asenkron fonksiyon yazıyordu. Ancak, her şey yolunda gitmiyordu. Ne zaman kodunu çalıştırsa, beklediği sonucu alamıyordu. Konsolda hiçbir şey gözükmüyordu. Birkaç kez kodunu kontrol etti,...

Angular'da "Cannot Read Property of Undefined" Hatasını Çözme

Angular geliştiricileri olarak hepimizin karşılaştığı bir hata var: *"Cannot read property of undefined"* hatası. Belki sen de bir gün bir komponent geliştirirken ya da servisleri birbirine bağlarken bu hata ile karşılaştın. Ama endişelenme! Bu yazımda,...