Tüm blog yazıları

async Anahtar Kelimesi

Promise zincirleri karmaşıklaştığında imdadımıza yetişen async anahtar kelimesini keşfedin! ES2017 ile gelen async fonksiyonların nasıl Promise döndürdüğünü, farklı tanımlama yöntemlerini ve hata yönetimini öğrenin.

eminbasbayan4 dk okuma
JavaScript async Anahtar Kelimesi: Promise Yönetimi Kolaylaşıyor

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.

javascript
// 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

javascript
async function veriGetir() {
    return "Veri geldi";
}

2. Arrow Function

javascript
const veriGetir = async () => {
    return "Veri geldi";
};

3. Metot Olarak

javascript
const api = {
    async kullaniciGetir() {
        return { id: 1, isim: "Ahmet" };
    }
};

4. Class İçinde

javascript
class VeriServisi {
    async veriCek() {
        return "Veri çekildi";
    }
}

async Fonksiyon = Otomatik Promise

async fonksiyon her zaman bir Promise döndürür:

javascript
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)); // 42

Return Değeri = Resolved Promise

Fonksiyondan döndürdüğünüz değer, Promise'ın fulfilled değeri olur:

javascript
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:

javascript
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

javascript
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

javascript
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

javascript
// 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: await anahtar kelimesini bir sonraki makalede detaylı inceleyeceğiz. Şimdilik sadece async fonksiyonların nasıl çalıştığına odaklanıyoruz.

Neden async Kullanmalıyız?

1. Kod Daha Okunabilir

javascript
// 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

javascript
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!

JavaScript Classes ile pratik uygulamalar, metotlar arası iletişim ve gerçek dünya kod örnekleri
JavaScript Dersleri9 dk okuma

JavaScript Classes - Pratik Uygulamalar

JavaScript class'ları ile pratik uygulamalara geçin! Metotlar arası iletişimden constructor'da metot çağırmaya, kod tekrarını azaltmaktan gerçek dünya senaryolarına kadar class kullanımının inceliklerini keşfedin. Kendi alışveriş sepeti örneğinizle bilginizi pekiştirin.

Yazıyı oku
JavaScript class yapısını gösteren bir kod örneği, ES6 ile modern nesne oluşturma
JavaScript Dersleri9 dk okuma

JavaScript Classes

ES6 ile JavaScript'e gelen class yapısı sayesinde nesne oluşturmak artık çok daha kolay ve düzenli! Constructor function karmaşasından kurtulup, okunabilir ve yönetilebilir kodlar yazmak isteyenler için modern JavaScript'in temel taşı olan class'ları tüm detaylarıyla keşfedin. Bu rehberle nesne şabl

Yazıyı oku
JavaScript kodunda Constructor Function ve new keyword'ü ile nesne oluşturma örnekleri
JavaScript Dersleri8 dk okuma

Constructor Functions ve new Keyword

Factory Function'ların hafıza israfı sorununa Constructor Function'lar ve new keyword'ü ile son verin! Metotları paylaştırarak JavaScript objelerini daha verimli nasıl oluşturacağınızı, new'in perde arkasında neler yaptığını ve prototype sisteminin gücünü bu rehberde keşfedin.

Yazıyı oku

Çerez tercihlerin

Platformun çalışması için zorunlu çerezler kullanıyoruz. İzin verirsen anonim kullanım verilerini ölçüyoruz. Ayrıntıları incele