Foruma hoş geldin 👋, Ziyaretçi

Forum içeriğine ve tüm hizmetlerimize erişim sağlamak için foruma kayıt olmalı ya da giriş yapmalısınız. Foruma üye olmak tamamen ücretsizdir.

Node.js'te async/await yapısını kullanırken karşılaştığımız yaygın hatalar ve kaçınma yolları

websterx

Üye
Katılım
14 Mart 2026
Mesajlar
10
Merhaba arkadaşlar, bugün Node.js'te async/await ile kod yazarken hepimizin düştüğü, başımızı ağrıtan bazı tuzaklardan ve bunlardan nasıl kurtulduğumdan bahsedeceğim. İlk başlarda "ne güzel işte, kod sanki senkron gibi akıyor" diye seviniyorduk ama sonra beklenmedik hatalar ve performans sorunlarıyla karşılaşınca işin rengi değişti. Gelin bu hatalara birlikte göz atalım.

🔥 Unutulan await'ler ve Sessiz Hatalar

Bu hatayı ilk gördüğümde kafayı yemiştim. Promise dönen bir fonksiyonu çağırıyorsunuz ama await yazmayı unutuyorsunuz. Sonuç? İşlem asenkron olarak başlıyor ama siz onun bitmesini beklemeden devam ediyorsunuz. Özellikle bir değer döndürmeyen, örneğin bir log yazma veya cache temizleme işlemlerinde bu hataya düşmek çok kolay.

JavaScript:
async function veritabaninaKaydet(veri) {
    // Bu satırda await UNUTULDU!
    db.query('INSERT INTO ...', veri); // Promise dönüyor ama beklenmiyor
    console.log('Kayıt işlemi başlatıldı'); // Bu, kayıt tamamlanmadan çalışır
}

// Doğru kullanım:
async function veritabaninaKaydetDogru(veri) {
    await db.query('INSERT INTO ...', veri);
    console.log('Kayıt tamamlandı');
}

🚀 Paralel İşlem Fırsatını Kaçırmak

Async/await'in en büyük tuzaklarından biri, bizi kodumuzu gereksiz yere sıralı (sequential) çalıştırmaya itmesi. Birbiriyle alakasız 3 API çağrısı yapacaksanız, bunları teker teker await'lemek büyük zaman kaybıdır.

JavaScript:
// YAVAŞ Yöntem: Sıralı bekliyor
async function yavasVerileriAl() {
    const kullanici = await fetchKullanici(); // 1sn
    const siparisler = await fetchSiparisler(); // 1sn (ilk işlem bitene kadar BAŞLAMAZ)
    const urunler = await fetchUrunler(); // 1sn
    // Toplam: ~3 saniye
}

// HIZLI Yöntem: Paralel çalıştır
async function hizliVerileriAl() {
    // Tüm Promise'ler aynı anda başlatılır
    const kullaniciPromise = fetchKullanici();
    const siparislerPromise = fetchSiparisler();
    const urunlerPromise = fetchUrunler();

    // Hepsi bittiğinde devam et
    const [kullanici, siparisler, urunler] = await Promise.all([
        kullaniciPromise,
        siparislerPromise,
        urunPromise
    ]);
    // Toplam: ~1 saniye (en yavaş olanın süresi)
}

⚠️ Try/Catch Karmaşası

Her async fonksiyonun etrafını try/catch ile sarmak kodun okunabilirliğini mahveder. Bunun yerine, benim en çok sevdiğim çözümlerden biri: yardımcı bir wrapper fonksiyonu.

JavaScript:
// Yardımcı fonksiyon: Promise'i döner, hata olursa [hata, sonuc] şeklinde array döndürür.
async function asyncHandler(promise) {
    try {
        const data = await promise;
        return [null, data];
    } catch (error) {
        return [error, null];
    }
}

// Kullanımı:
async function anaIslem() {
    const [hata, kullanici] = await asyncHandler(fetchKullanici(1));

    if (hata) {
        console.error('Kullanıcı alınamadı:', hata);
        // Hata yönetimi burada
        return;
    }

    // kullanici verisi burada güvenle kullanılabilir
    console.log(kullanici.isim);
}

Bu yöntem, özellikle birçok async işlem yapılan yerlerde try/catch bloklarından kurtararak kodu temiz tutmamı sağladı.

💡 Toparlayacak Olursak

Async/await hayatımızı kolaylaştıran muhteşem bir özellik ama dikkatli kullanmazsak performans tuzakları ve gizli hatalarla dolu. Anahtar noktalar:
1. Await'i unutma, özellikle değer döndürmeyen işlemlerde.
2. Paralel çalıştırma fırsatlarını kaçırma, Promise.all senin dostun.
3. Hata yönetimini merkezileştir, kodunu try/catch çöplüğüne çevirme.

Siz de Node.js'te async/await kullanırken benzer sorunlarla karşılaştınız mı? "Ben şöyle bir yöntem buldum daha temiz" dediğiniz bir pratiğiniz var mı? Yorumlarda paylaşalım, hep birlikte öğrenelim!
 

Tema özelleştirme sistemi

Bu menüden forum temasının bazı alanlarını kendinize özel olarak düzenleye bilirsiniz.

Zevkine göre renk kombinasyonunu belirle

Tam ekran yada dar ekran

Temanızın gövde büyüklüğünü sevkiniz, ihtiyacınıza göre dar yada geniş olarak kulana bilirsiniz.

Geri