CodeBlanks Logo Icon CodeBlanks

Özet - Callback'ler

higher-order, error-first ve callback hell'i birleştirerek bir dosya okuyucu yazarsın.

Özet - Callback'ler

Bu grupta callback'lerin beş yönünü gördün: temel callback kavramı, higher-order function'lar, forEach ile callback kullanımı, Node.js'in error-first sözleşmesi ve callback hell tuzağı.

Bunları birleştirerek gerçek bir akış kurabilirsin. Örneğin bir dosya okuyucu: kullanıcı yükler, hata kontrol edilir, sonra post'lar yüklenir. Her adım callback alır ve error-first sözleşmesine uyar.

Son örnekte zincirleme bir yükleyici yazacaksın. İlk callback'ten gelen veriyi ikinci çağrıya aktaracak, her adımda error-first kontrolü yapacaksın. Bu desen, Node.js'in klasik callback tabanlı akışlarını özetler.

Uygulama Dosya okuyucu simülasyonu

loadUser(id, cb) fonksiyonunu tanımla: id 0 ise cb(new Error('yok'), null), değilse cb(null, { name: 'Ayşe' }) çağrısı yapsın. loadUser(1, (err, user) => { if (err) { console.error(err.message); return; } console.log(user.name); }) biçiminde çağır; hatasız durumda adı yazılsın.

Başlangıç kodu

index.js
// loadUser fonksiyonunu tanımla ve error-first callback ile çağır

Örnek çözüm

index.js
function loadUser(id, cb) {
  if (id === 0) { cb(new Error('yok'), null); return; }
  cb(null, { name: 'Ayşe' });
}
loadUser(1, (err, user) => {
  if (err) { console.error(err.message); return; }
  console.log(user.name);
});

Beklenen çıktı

Ayşe

Uygulama Zincirleme yükleyici

loadUser(id, cb) fonksiyonunu tanımla: cb(null, { name: 'Ayşe' }) çağrısı yapsın. loadPosts(user, cb) fonksiyonunu tanımla: cb(null, ['a', 'b', 'c']) çağrısı yapsın. loadUser(1, (err, user) => { loadPosts(user, (err2, posts) => { console.log(user.name + ': ' + posts.length); }); }) biçiminde iç içe çağır.

Başlangıç kodu

index.js
// loadUser ve loadPosts fonksiyonlarını tanımla, iç içe çağır

Örnek çözüm

index.js
function loadUser(id, cb) {
  cb(null, { name: 'Ayşe' });
}
function loadPosts(user, cb) {
  cb(null, ['a', 'b', 'c']);
}
loadUser(1, (err, user) => {
  loadPosts(user, (err2, posts) => {
    console.log(user.name + ': ' + posts.length);
  });
});

Beklenen çıktı

Ayşe: 3

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Kavramları eşle

Kavram Anlamı
cb() Callback çağrısı
makeAdder Higher-order function
forEach Callback kullanan metot
(err, data) Error-first imza
piramit girinti Callback hell belirtisi

2 Dosya okuyucu nasıl kurulur?

  • Tek fonksiyonla
  • Sadece console.log ile
  • Zincirleme callback'lerle Doğru cevap
  • Dizi metotlarıyla

Açıklama: zincirleme callback'lerle her adım bir sonrakını çağırır.

3 Error-first imza

Soru
function handler(____, data) { if (err) throw err; console.log(data); }
Cevap
function handler(err, data) { if (err) throw err; console.log(data); }

Açıklama: ilk parametre err'dir; Node.js sözleşmesi budur.

Başlangıç bölümündeki tüm dersler