Asenkron programlama, temelde zaman alan işlemleri (veritabanı sorguları, API çağrıları, dosya okuma gibi) başlatırken, bu işlemlerin bitmesini beklemeden diğer kodları çalıştırmanıza olanak tanır. JavaScript, bu asenkron işlemleri yönetmek için üç ana yapı sunar: Callback, Promise ve Async/Await. Bu üç yapı arasında doğru seçim yapmak, kodunuzu daha verimli ve okunabilir hale getirebilir.
Callback: Eski Fakat Hala Güçlü
# Callback Örneği:
function getData(callback) {
setTimeout(() => {
callback('Veri yüklendi!');
}, 2000);
}
getData(function(message) {
console.log(message);
});
Bu örnekte, `getData` fonksiyonu asenkron bir işlem başlatıyor ve işlem tamamlandığında `callback` fonksiyonunu çağırıyor. Basit gibi görünüyor, ancak birden fazla asenkron işlem iç içe geçtiğinde, kodun okunabilirliği ciddi şekilde bozulabilir.
Promise: Daha Temiz Bir Çözüm
# Promise Örneği:
function getData() {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve('Veri yüklendi!');
}, 2000);
});
}
getData().then(message => {
console.log(message);
}).catch(error => {
console.error(error);
});
Promise kullanmak, kodunuzu çok daha okunabilir ve sürdürülebilir hale getirir. `.then()` ve `.catch()` blokları, başarı ve hata durumlarını ayrı ayrı yönetmenizi sağlar.
Async/Await: Modern Çözüm
# Async/Await Örneği:
async function getData() {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve('Veri yüklendi!');
}, 2000);
});
}
async function displayData() {
try {
const message = await getData();
console.log(message);
} catch (error) {
console.error(error);
}
}
displayData();
Burada, `async` ve `await` anahtar kelimeleri, kodu daha temiz ve okunabilir kılar. Asenkron bir işlemin sonuçlarını beklemek için `await` kullanılırken, hata yönetimi de `try...catch` bloğuyla yapılabilir.
Callback, Promise ve Async/Await Arasındaki Farklar
- Promise: Callback’lere kıyasla daha yönetilebilir ve okunabilir bir yapıdır. Ancak hala zincirleme yapılarda karmaşıklık oluşabilir.
- Async/Await: En modern ve okunabilir yaklaşımdır. Asenkron kodları senkron gibi yazmanıza olanak tanır, fakat yalnızca ES6+ destekleyen ortamlarda kullanılabilir.
Hangi Yapıyı Ne Zaman Kullanmalısınız?
- Daha büyük ve yönetilebilir projeler için Promise yapısı daha uygun olabilir. Ayrıca, hata yönetimini daha etkili bir şekilde gerçekleştirebilirsiniz.
- En temiz ve anlaşılır çözüm için Async/Await tercih edilmelidir. Özellikle kodunuzda birçok asenkron işlem varsa ve okunabilirliği artırmak istiyorsanız, Async/Await yapısı en iyi seçenektir.
Sonuç: Asenkron Programlamayı Başarıyla Yönetmek
Umarım bu yazı, asenkron programlamayı daha iyi anlamanızı sağlar ve doğru yapıyı seçme konusunda size yardımcı olur. Şimdi sıradaki asenkron kod yazma görevine başlamak için hazırsınız!