# Callback vs Promise

Adres: https://softwaredictionary.org/tr/karsilastirma/callback-vs-promise
Son güncelleme: 2026-10-02

Kısaca: Callback, iş bitince çağrılsın diye başka bir fonksiyona verilen fonksiyondur; promise ise gelecekteki bir sonucu temsil eder, zincirlenir ve hataları yakalar.

## Callback ile promise arasındaki fark nedir?

İkisi de bir dosyayı okumak ya da bir API'yi çağırmak gibi sonradan biten işlerle başa çıkmanın yollarıdır. Callback'te işleme bir fonksiyon verirsiniz, işlem de bittiğinde onu sonuçla çağırır; Node.js'te bu çoğu zaman `(error, result)` biçimindedir. Promise'te ise işlem size bir şey geri verir: önce beklemede (pending) olan, sonra bir değerle yerine getirilen (fulfilled) ya da bir hatayla reddedilen (rejected) bir nesne.

Fark, adımlar birbirine bağlı olduğunda ortaya çıkar. Callback'lerde her adım bir öncekinin callback'inin içine yazılır; kod sağa doğru kayar ve hatalar her seviyede ayrı ayrı denetlenmek zorunda kalır. Buna callback cehennemi (callback hell) denir. Promise'ler bunu `.then()` çağrılarından oluşan düz bir zincire çevirir, her hatayı tek bir `.catch()`'e yollar ve işleri paralel çalıştırmak için `Promise.all` gibi yardımcılarla birleşir.

Promise'ler callback fikrinin yerini almaz, onun üzerine kurulur: `.then()` yine bir fonksiyon alır. Getirdikleri şey güvencelerdir. Bir promise yalnızca bir kez sonuçlanır ve işleyicileri her zaman asenkron çalışır; bu da bir callback'in iki kez ya da erken çağrılması gibi hataları önler. Bugün en yaygın yazım biçimi olan `async` ve `await`, promise'lerin üzerine kurulu bir sözdizimidir.

Sık yapılan bir yanlış, callback'lerin modası geçti sanılmasıdır. Olay dinleyicileri, `map` gibi dizi metotları ve birçok API haklı olarak callback kullanır; çünkü bunlar defalarca ya da hemen çalışır. Promise'ler tek seferlik asenkron sonuçlara uyar; eski callback tarzı API'ler de örneğin Node.js'in `util.promisify` aracıyla sarılabilir.

| Özellik | Callback | Promise |
| --- | --- | --- |
| Nedir | Verilen ve sonra çağrılan bir fonksiyon | Gelecekteki bir değeri temsil eden bir nesne |
| Sıralı adımlar | İç içe yazılır | .then() ile zincirlenir ya da await ile yazılır |
| Hatalar | Her callback'te ayrı denetlenir | Bütün zincir için tek bir .catch() ya da try/catch |
| Kaç kez çalışır | Çağıran ne kadar isterse | Tam olarak bir kez sonuçlanır |
| Paralel işler | Biten işleri elle saymak | Promise.all, Promise.race ve benzeri yardımcılar |
| Tipik kullanım | Olaylar, zamanlayıcılar, dizi metotları, eski Node.js API'leri | Ağ istekleri, dosya okumaları ve diğer tek seferlik sonuçlar |

## Callback şu durumlarda doğru seçim

- Fonksiyon, olay dinleyicilerinde ya da dizi metotlarında olduğu gibi defalarca çalışıyor.
- Yalnızca callback sunan eski bir API ile çalışıyorsunuz.
- İş senkron ve yalnızca bir adımı özelleştirmeniz gerekiyor.

## Promise şu durumlarda doğru seçim

- Bir ağ isteği gibi tek bir sonucu bekliyorsunuz.
- Birbirine bağlı birkaç asenkron adım var.
- Hataları tek bir yerde yakalamak ya da işleri paralel çalıştırmak istiyorsunuz.

## Sık sorulan sorular

**async/await, promise'lerle aynı şey mi?**

Arka planda evet. Bir async fonksiyon her zaman bir promise döndürür; await de o fonksiyonu bir promise sonuçlanana kadar bekletir. Yani promise zincirlerini daha okunaklı yazmanın bir yoludur.

**Callback cehennemi nedir?**

Her asenkron adımın bir öncekinin callback'i içine yazıldığı koddur; girintisi derinleşir, takip etmesi zorlaşır ve aynı hata denetimleri her seviyede tekrarlanır.

**Callback tabanlı bir API'yi promise'e çevirebilir miyim?**

Evet. Onu new Promise((resolve, reject) => …) ile sarabilir ya da Node.js'te (error, result) callback'i alan fonksiyonlar için util.promisify kullanabilirsiniz.

---

Software Dictionary: https://softwaredictionary.org/tr · https://softwaredictionary.org/tr/llms.txt
