
Promise'lar harika, ama .then() zincirleri uzadıkça kod hala karmaşıklaşabiliyor. JavaScript topluluğu bunun farkındaydı ve ES2017 (ES8) ile birlikte async ve await anahtar kelimeleri geldi. Bu makalede async anahtar kelimesinin ne yaptığını öğreneceğiz.
async Nedir?
async anahtar kelimesi, bir fonksiyonu asenkron fonksiyon olarak tanımlar. Bu fonksiyon otomatik olarak bir Promise döndürür.
// Normal fonksiyon
function selamla() {
return "Merhaba!";
}
// Async fonksiyon
async function asyncSelamla() {
return "Merhaba!";
}
console.log(selamla()); // "Merhaba!"
console.log(asyncSelamla()); // Promise {<fulfilled>: "Merhaba!"}async Fonksiyon Tanımlama Yolları
1. Fonksiyon Deklerasyonu
async function veriGetir() {
return "Veri geldi";
}2. Arrow Function
const veriGetir = async () => {
return "Veri geldi";
};3. Metot Olarak
const api = {
async kullaniciGetir() {
return { id: 1, isim: "Ahmet" };
}
};4. Class İçinde
class VeriServisi {
async veriCek() {
return "Veri çekildi";
}
}async Fonksiyon = Otomatik Promise
async fonksiyon her zaman bir Promise döndürür:
async function sayi() {
return 42;
}
// Bu aslında şuna eşdeğer:
function sayiPromise() {
return Promise.resolve(42);
}
// İkisi de aynı şekilde kullanılır
sayi().then(s => console.log(s)); // 42
sayiPromise().then(s => console.log(s)); // 42Return Değeri = Resolved Promise
Fonksiyondan döndürdüğünüz değer, Promise'ın fulfilled değeri olur:
async function kullaniciBilgisi() {
return {
id: 1,
isim: "Mehmet",
email: "mehmet@email.com"
};
}
kullaniciBilgisi().then(kullanici => {
console.log("Kullanıcı:", kullanici.isim);
console.log("Email:", kullanici.email);
});Hata Fırlatma = Rejected Promise
async fonksiyon içinde hata fırlatırsanız, Promise reddedilir:
async function hataliIslem() {
throw new Error("Bir şeyler yanlış gitti!");
}
hataliIslem()
.then(sonuc => console.log(sonuc))
.catch(hata => console.log("Hata yakalandı:", hata.message));
// Çıktı: "Hata yakalandı: Bir şeyler yanlış gitti!"Gerçek Hayat Örneği: Kullanıcı Doğrulama
const kullanicilar = [
{ id: 1, email: "ahmet@email.com", sifre: "123456" },
{ id: 2, email: "ayse@email.com", sifre: "abcdef" }
];
async function girisYap(email, sifre) {
// Kullanıcıyı bul
const kullanici = kullanicilar.find(k => k.email === email);
if (!kullanici) {
throw new Error("Kullanıcı bulunamadı!");
}
if (kullanici.sifre !== sifre) {
throw new Error("Şifre hatalı!");
}
return {
basarili: true,
kullanici: {
id: kullanici.id,
email: kullanici.email
}
};
}
// Kullanımı
girisYap("ahmet@email.com", "123456")
.then(sonuc => {
console.log("✅ Giriş başarılı!");
console.log("Kullanıcı ID:", sonuc.kullanici.id);
})
.catch(hata => {
console.log("❌ Giriş başarısız:", hata.message);
});
girisYap("ahmet@email.com", "yanlis-sifre")
.then(sonuc => console.log(sonuc))
.catch(hata => console.log("❌", hata.message));
// Çıktı: "❌ Şifre hatalı!"Gerçek Hayat Örneği: Form Doğrulama
async function formDogrula(formVerisi) {
const hatalar = [];
// İsim kontrolü
if (!formVerisi.isim || formVerisi.isim.length < 2) {
hatalar.push("İsim en az 2 karakter olmalı");
}
// Email kontrolü
if (!formVerisi.email || !formVerisi.email.includes("@")) {
hatalar.push("Geçerli bir email adresi girin");
}
// Şifre kontrolü
if (!formVerisi.sifre || formVerisi.sifre.length < 6) {
hatalar.push("Şifre en az 6 karakter olmalı");
}
// Hata varsa reject et
if (hatalar.length > 0) {
throw { tip: "DOGRULAMA_HATASI", hatalar: hatalar };
}
// Başarılı
return { gecerli: true, mesaj: "Form doğrulandı" };
}
// Kullanımı
const formVerisi = {
isim: "A", // çok kısa
email: "gecersiz-email", // @ yok
sifre: "123" // çok kısa
};
formDogrula(formVerisi)
.then(sonuc => console.log("✅", sonuc.mesaj))
.catch(hata => {
console.log("❌ Form hataları:");
hata.hatalar.forEach(h => console.log(" -", h));
});async ile Promise'ı Birlikte Kullanma
// Promise döndüren fonksiyon
function bekle(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
// async fonksiyon içinde kullanma
async function animasyon() {
console.log("🔴 Kırmızı");
await bekle(1000); // 1 saniye bekle
console.log("🟠 Turuncu");
await bekle(1000);
console.log("🟡 Sarı");
await bekle(1000);
console.log("🟢 Yeşil");
return "Animasyon tamamlandı!";
}
animasyon().then(mesaj => console.log(mesaj));💡 Not:
awaitanahtar kelimesini bir sonraki makalede detaylı inceleyeceğiz. Şimdilik sadeceasyncfonksiyonların nasıl çalıştığına odaklanıyoruz.
Neden async Kullanmalıyız?
1. Kod Daha Okunabilir
// Promise zincirleme
function veriIsle() {
return veriGetir()
.then(veri => donustur(veri))
.then(sonuc => kaydet(sonuc))
.then(kayit => bildirimGonder(kayit));
}
// async/await ile
async function veriIsle() {
const veri = await veriGetir();
const sonuc = await donustur(veri);
const kayit = await kaydet(sonuc);
return await bildirimGonder(kayit);
}2. Hata Yönetimi Daha Kolay
async function guvenliIslem() {
try {
const veri = await riskliIslem();
return veri;
} catch (hata) {
console.log("Hata yakalandı:", hata);
return varsayilanDeger;
}
}3. Debugging Daha Kolay
async/await ile breakpoint koyabilir ve adım adım debug edebilirsiniz - Promise zincirleriyle bu çok daha zordur.
Özet
Bu makalede öğrendiklerimiz:
✅ async anahtar kelimesi fonksiyonu asenkron yapar
✅ async fonksiyon otomatik olarak Promise döndürür
✅ Return değeri Promise'ın fulfilled değeri olur
✅ throw edilen hata Promise'ı reject eder
✅ async fonksiyonlara .then() ve .catch() eklenebilir
✅ async, await ile birlikte kullanıldığında gerçek gücünü gösterir
Bir sonraki makalede await anahtar kelimesini ve async/await'in tam gücünü göreceğiz!


