JavaScript’te asenkronluk tam bir “kendi düzeni olan çalışan” gibidir:
- Ne zaman döneceği belli değildir,
- Dönerse güzel,
- Dönmezse sorun çıkarmadan “error” fırlatır,
- Bazen geç döner,
- Bazen yanlış bilgi döndürür,
- Bazen de hiç dönmez.
Bu yüzden JavaScript, asenkronluğu bir düzene oturtmak için Promise denen yapıyı getirdi.
Promise’i düşün:
“Ben bu işlemi yapıyorum. Sana hemen sonuç veremem ama bir gün mutlaka ya başarılı olur ya da başarısız olur.”
Ve biz de bunu kontrol eden then–catch–finally–async–await gibi sihirli araçlar kullanıyoruz.
Haydi gel, Promises evrenine dalalım…
⚡ 1) Promise Nedir?
Promise → “Gelecekte dönecek bir sonuç” demek.
Promise her zaman 3 durumdan birindedir:
| Durum | Açıklama |
|---|---|
| pending | “İşlem yapılıyor, bekle.” |
| fulfilled | “Tamamdır, başarıyla döndüm.” |
| rejected | “Olmadı, hata var.” |
📌 Mini Örnek:
const askOut = new Promise((resolve, reject) => {
const sheSaidYes = Math.random() > 0.5;
setTimeout(() => {
if (sheSaidYes) {
resolve("Evet dedi!");
} else {
reject("Reddedildi.");
}
}, 1000);
});
console.log(askOut);
İlk çıktı:Promise { <pending> }
Çünkü işlem henüz devam ediyor.
⚡ 2) then() & catch(): Başarı ve Hata Yönetimi
✔ then()
İşlem başarılıysa then çalışır.
✔ catch()
Hata varsa catch çalışır.
askOut
.then(response => {
console.log("Mutlu son:", response);
})
.catch(error => {
console.log("Hata:", error);
});
⚡ 3) finally(): “Sonuç ne olursa olsun çalıştır”
finally() yani:
- Başarılı olsa da,
- Hata olsa da,
her durumda çalışan kapanış bloğudur.
askOut
.then(res => console.log(res))
.catch(err => console.log(err))
.finally(() => console.log("Süreç tamamlandı."));
⚡ 4) async / await: Promises’ın En Rahat Anlaşılır Hali
async/await ile Promises çok daha okunabilir hâle gelir.
✔ await → “Bu Promise dönene kadar burada bekle.”
✔ async → “Bu fonksiyonun içinde await kullanacağım.”
async function date() {
try {
const result = await askOut;
console.log("Sonuç:", result);
} catch (error) {
console.log("Hata:", error);
}
}
date();
Bu yapı daha temiz, daha okunur, daha profesyoneldir.
⚡ 5) Promise.all(): Hepsi Aynı Anda Gelsin
“Üç API isteği gönderdim. Hepsi başarıyla dönerse güzel.
Bir tanesi bile patlarsa hepsi çöker.”
Promise.all([
fetchUser(),
fetchPosts(),
fetchComments()
])
.then(res => console.log("Hepsi başarılı:", res))
.catch(() => console.log("Bir tanesi bile hata → tümü çöktü"));
Not: Büyük projelerde çok kullanılır ama risklidir.
⚡ 6) Promise.race(): “Kim önce dönerse o kazanır”
Yarış gibi düşün.
İlk dönen Promise sonuç olarak verilir.
Promise.race([
fetchSlowUser(),
fetchFastUser()
]).then(res => console.log("İlk gelen:", res));
⚡ 7) Promise.any(): “İçinizden biri düzgün çalışsa yeter”
- İlk başarılı olan Promise döner.
- Hepsi hata verirse AggregateError fırlatır.
Promise.any([
fetchFail1(),
fetchFail2(),
fetchSuccess()
]).then(res => console.log("Başarılı olan:", res));
⚡ 8) En Sık Yapılan Promise Hataları
❌ 1) return yazmayı unutmak
// Yanlış
.then(() => {
doSomething();
})
// Doğru
.then(() => {
return doSomething();
})
❌ 2) await’i unutmak
// Yanlış
const data = fetchData(); // Promise döner
// Doğru
const data = await fetchData();
❌ 3) try/catch kullanmamak
Try/catch’siz async fonksiyon felaket getirir.
⚡ 9) Promise’leri Gerçek Hayattan Anlamak (Komik Tablo)
| JavaScript | Gerçek Hayat |
|---|---|
| pending | “Kargo yolda.” |
| fulfilled | “Kargo teslim edildi.” |
| rejected | “Kargo iade edildi.” |
| then | “Sonuç geldi.” |
| catch | “Bir şey ters gitti.” |
| finally | “Teslimat süreci kapandı.” |
⚡ 10) Mini Uygulama: “Mesaj Gönderen Simülasyon”
Promise + async/await + error handling tek bir yerde:
function sendMessage(text) {
return new Promise((resolve, reject) => {
const delivered = Math.random() > 0.3;
setTimeout(() => {
if (delivered) {
resolve(`Mesaj iletildi: "${text}"`);
} else {
reject("Mesaj teslim edilmedi.");
}
}, 1000);
});
}
async function simulate() {
try {
const msg1 = await sendMessage("Selam!");
console.log(msg1);
const msg2 = await sendMessage("Nasılsın?");
console.log(msg2);
const msg3 = await sendMessage("Görüşelim mi?");
console.log(msg3);
} catch (err) {
console.log("Hata:", err);
} finally {
console.log("Simülasyon tamamlandı.");
}
}
simulate();
Bu mini uygulama Promises’ın tüm mantığını gösterir.
⚡ 11) Profesyonel İpuçları
✔ Mümkünse async/await kullan
Daha temiz, daha modern.
✔ Promise.all ile paralel çalıştır
Zaman tasarrufu sağlar.
✔ Hataları mutlaka yakala
Hem then/catch hem try/catch.
✔ Promise zincirlerini uzatma
Çorba gibi olur → Debug kabusa döner.
✔ API işlerinde Promises vazgeçilmezdir
🎉 SONUÇ
Artık Promises hakkında:
✔ Ne olduklarını
✔ Nasıl çalıştıklarını
✔ Hangi durumlara sahip olduklarını
✔ then–catch–finally kullanımını
✔ async/await farkını
✔ Toplu istek yöntemlerini
✔ Gerçek hayattan benzetmelerini
✔ Mini bir uygulamayı
✔ En iyi pratikleri
bütünüyle öğrendin.
JavaScript’i artık asenkron acayiplikleriyle birlikte daha iyi yönetebilirsin.

