# JS Callback Helvası: Promise’ler ve Async/Await ile Kurtuluş Hikayesi

> Bir zamanlar, JavaScript dünyasında "Callback Hell" denen bir canavar dolaşıyordu. Bu canavar, masum kodları labirente çevirip onları içinden çıkılmaz bir hale getiriyordu. Kodunuzu her açtığınızda bir kabus gibi karşılaştığınız bu karmaşa, beyninizi tıpkı Inception filmi gibi katman katman açıyor ve "Acaba buradan çıkış var mı?" diye düşündürüyordu. Ama merak etmeyin, bu hikâyenin bir kahramanı var: Promise’ler ve Async/Await. Gelin, bu kurtuluş hikayesini birlikte yazalım.

- Yazar: [Halit Yeşil](https://halityesil.com/)
- Yayın tarihi: 2024-12-10
- Dil: Türkçe
- Kaynak adres: https://halityesil.com/js-callback-helvasi-promiseler-ve-async-await-ile-kurtulus-hikayesi/
- İngilizce sürümü: https://halityesil.com/en/js-callback-mess-the-redemption-tale-of-promises-and-async-await.md
- Kategori: JavaScript / TypeScript
- Etiketler: Async/Await, Callback Hell, hata yönetimi, JavaScript, JavaScript labirenti, kod düzenleme, kod okunabilirliği, modern JavaScript, Promise, senkron programlama, temiz kod, Yazılım Geliştirme, yazılımcı sorunları
- Lisans: https://creativecommons.org/licenses/by-nc/4.0/
- Atıf: Halit Yeşil. “JS Callback Helvası: Promise’ler ve Async/Await ile Kurtuluş Hikayesi”. halityesil.com, 2024-12-10. https://halityesil.com/js-callback-helvasi-promiseler-ve-async-await-ile-kurtulus-hikayesi/

---

## **Callback Hell: Kabus Nasıl Başladı?**

Eğer bir gün JavaScript yazdıysanız, şu senaryoya kesin denk gelmişsinizdir:

```javascript
getUserData(function(user) {
  getPosts(user.id, function(posts) {
    getComments(posts[0].id, function(comments) {
      console.log(comments);
    });
  });
});
```

İşte karşınızda bir "callback piramidi"! Bu yapı, kodunuzu okuyan birinin (ve hatta sizin) gözlerinden yaş getirir. Bu kadar karmaşa yetmezmiş gibi, bir yerde hata çıkarsa, neyin nereye gittiğini anlamak için Sherlock Holmes’ten yardım almanız gerekebilir.

### **Callback Hell’in Yan Etkileri**

Callback Hell, sadece estetik bir sorun değil, ciddi yan etkileri olan bir problem:

1. **Okunabilirlik Sorunu**: Kod, kitap gibi okunabilir olmaktan çıkıp bir bulmacaya dönüşüyor.
2. **Hata Yönetimi Zorluğu**: Bir callback içinde hata olduğunda, o hatayı bulup yönetmek bir işkenceye dönüşüyor.
3. **Bakım Kabusu**: Yarın sabah gelip bu kodu düzeltmek zorunda kalacağınızı düşünün… Kahveniz bile bu kabusu hafifletemez.

> Ve bu noktada, Leonardo DiCaprio’nun o ünlü sorusu akla geliyor:
> "Bu kodun sonu gerçekten açık mı kalacak?"

## **Promise: İlk Umut Işığı**

JavaScript topluluğu, callback’lere alternatif olarak **Promise** adında bir çözümle geldi. Promise, size şu sözü veriyor:

<figure class="wp-block-pullquote">> "Kodun daha okunabilir ve yönetilebilir olacak, söz!"
> 
> <cite>JS</cite>

</figure>Promise’ler sayesinde yukarıdaki kod şu hale gelebiliyor:

```javascript
getUserData()
  .then(user => getPosts(user.id))
  .then(posts => getComments(posts[0].id))
  .then(comments => console.log(comments))
  .catch(error => console.error("Bir şeyler ters gitti!", error));
```

Ne kadar düzenli görünüyor, değil mi? Artık kodunuzla bir şeyler yaparken, bir tabloya bakar gibi keyifle okuyabilirsiniz.

### **Async/Await: Kodunuzda Zaman Yolculuğu**

Tam her şey daha iyiye gidiyor derken, JavaScript bize bir sürpriz daha yaptı: **Async/Await**. Promise’lerin tatlı dili bir yana, async/await kodunuzu daha da basitleştirir ve neredeyse senkron bir kod yazıyormuş gibi hissettirir.

Yukarıdaki örneği async/await ile yazalım:

```javascript
async function fetchComments() {
  try {
    const user = await getUserData();
    const posts = await getPosts(user.id);
    const comments = await getComments(posts[0].id);
    console.log(comments);
  } catch (error) {
    console.error("Bir şeyler ters gitti!", error);
  }
}
```

Gördüğünüz gibi, kod şimdi daha düz bir yapıya sahip. Neredeyse bir günlük okur gibi, değil mi? "Önce kullanıcı verisini al, sonra gönderileri çek, ardından yorumları getir ve sonunda sonucu göster." Her şey net, tertemiz.

### **Async/Await’in Avantajları**

**Okunabilirlik**: Artık kodunuzu yazan kişi değil, okuyacak olan kişi kazanıyor.

**Hata Yönetimi**: `try-catch` bloklarıyla hataları daha düzgün bir şekilde ele alabilirsiniz.

**Geliştirici Mutluluğu**: Kod yazmak artık bir işkence değil, bir sanat.

## **Callback Hell’den Kurtuluş: Kodunuzun Mutlu Sonu**

Bir yazılımcı olarak, hayaliniz kodunuzun tıpkı güzel bir film gibi akıcı olmasıdır. Promise’ler ve async/await sayesinde, bu hayal gerçek oldu. Callback Hell canavarını öldürdük ve şimdi kodumuzda düzen, huzur ve mutluluk var.

Unutmayın, *"Her büyük kodun arkasında, okunabilir bir tasarım yatar."* (Bu söz tam olarak böyle değildi sanki ama; neyse siz anladınız). Bu tasarımı yakalamak için Promise ve async/await kullanmayı öğrenin. Bir gün kodunuzla gurur duymanız gerektiğinde, ona bir bakış atın ve deyin ki: *"Bu, baştan sona benim eserim."*

Ve kim bilir, belki bir gün, bir başka yazılımcı sizin kodunuzu okuyup şunu söyler:

<figure class="wp-block-pullquote">> "Bu kodun gerçekten bir sonu varmış!" 😊
> 
> <cite>Başka bir yazılımcı!</cite>

</figure>
