crazy_coder
Moderatör
- Katılım
- 20 Şub 2026
- Mesajlar
- 204
- Tepkime puanı
- 0
- Puanları
- 16
1. Promise (Söz) Nedir?
Bir Promise, gelecekte tamamlanacak (veya başarısız olacak) bir işlemin sonucunu temsil eden bir nesnedir. Tıpkı gerçek hayattaki bir söz gibi; bir işlem başlar ve size bir söz verir.
Bir Promise üç farklı durumda olabilir:
[]Pending (Beklemede): İşlem henüz tamamlanmadı.
[]Fulfilled (Tamamlandı): İşlem başarıyla bitti ve sonuç döndü.- Rejected (Reddedildi): İşlem sırasında bir hata oluştu.
JavaScript:
const veriGetir = new Promise((resolve, reject) => {
const basariliMi = true;
setTimeout(() => {
if (basariliMi) {
resolve("Veri başarıyla geldi!");
} else {
reject("Hata: Veri alınamadı.");
}
}, 2000);
});
veriGetir
.then(sonuc => console.log(sonuc)) // Başarılıysa çalışır
.catch(hata => console.log(hata)); // Hata varsa çalışır
2. Callback Hell (Geri Çağırma Cehennemi)
Promise'lerden önce, iç içe geçmiş fonksiyonlar (callbacks) kullanılırdı. Bu durum, kodun okunmasını imkansız hale getiren ve "Pyramid of Doom" (Yıkım Piramidi) denilen karmaşık bir yapıya yol açardı. Promise'ler bu yapıyı düzeltmek için gelmiştir.
3. Modern Çözüm: Async ve Await
ES2017 ile gelen async/await yapısı, Promise'leri kullanmanın en şık ve okunabilir yoludur. Kodun asenkron olmasına rağmen, sanki yukarıdan aşağıya düz bir şekilde (senkronmuş gibi) okunmasını sağlar.
[]async: Bir fonksiyonun asenkron olduğunu ve her zaman bir Promise döneceğini belirtir.
[]await: Sadece async fonksiyonlar içinde çalışır. Promise sonuçlanana kadar kodun o satırda beklemesini sağlar.
JavaScript:
async function kullaniciVerisiIsle() {
try {
console.log("Veri çekiliyor...");
// fetch bir Promise döner, await ile sonucun gelmesini bekleriz
const response = await fetch('[https://jsonplaceholder.typicode.com/users/1](https://jsonplaceholder.typicode.com/users/1)');
const data = await response.json();
console.log("Kullanıcı adı: ", data.name);
} catch (error) {
// Hata yönetimi (catch bloğu gibi çalışır)
console.error("İşlem sırasında bir hata oluştu: ", error);
} finally {
console.log("İşlem tamamlandı.");
}
}
kullaniciVerisiIsle();
4. Neden Async/Await Kullanmalıyız?
[]Okunabilirlik: .then() ve .catch() zincirlerine göre çok daha temizdir.
[]Hata Yönetimi: Standart try...catch bloklarını kullanabilmemizi sağlar.- Hata Ayıklama (Debugging): Breakpoint koyduğunuzda kodun akışını takip etmek çok daha kolaydır.
Pratik Bir Senaryo: Sıralı İşlemler
Diyelim ki önce bir kullanıcıyı çekmeniz, sonra o kullanıcının yazılarını almanız gerekiyor:
JavaScript:
async function akisYonetimi() {
// Önce kullanıcıyı al
const user = await fetch('.../user/1').then(r => r.json());
// Kullanıcı geldikten sonra onun yazılarını al
const posts = await fetch(`.../posts?userId=${user.id}`).then(r => r.json());
console.log(`${user.name} kullanıcısının ${posts.length} adet yazısı var.`);
}
Sonuç
Asenkron programlama, JavaScript'in en güçlü ancak en çok kafa karıştıran konularından biridir. Promise temel mantığını kavramak, Async/Await ile de bu mantığı temiz bir şekilde koda dökmek sizi profesyonel bir geliştirici yapar. Artık API isteklerinizi, dosya işlemlerinizi veya zamanlayıcılarınızı çok daha güvenli bir şekilde yönetebilirsiniz.