Geri Çağrılar ve Geri Çağrı Cehennemi
Geri çağrı tabanlı eşzamansızlığı öğrenin, geri çağrı cehennemi olarak bilinen iç içe geçme sorununu belirleyin ve bunu çözmek için Promise'lerin neden geliştirildiğini görün.
Geri Çağrılar ve Geri Çağrı Cehennemi, CoddyKit'te ücretsiz bir Frontend Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Frontend Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Frontend Academy kursu toplamda 4 dersten oluşur.
Geri Çağırma İşlevleri Nedir?
Geri çağırma işlevi, bazı işlemler tamamlandığında daha sonra çağrılmak üzere başka bir işleve bağımsız değişken olarak geçirilen işlevdir. Geri çağırma işlevleri, JavaScript'teki özgün asenkron kalıptır; Promise'lerden önce ortaya çıkmışlardır.
// Synchronous callback:
[1, 2, 3].forEach(function(n) {
console.log(n);
});
// Async callback:
setTimeout(function() {
console.log('1 second later');
}, 1000);Node.js Hata Öncelikli Geri Çağırma İşlevleri
Node.js bir kuralı standartlaştırmıştır: Geri çağırma işlevleri ilk bağımsız değişken olarak bir hata, ikinci bağımsız değişken olarak da sonucu alır. err değeri null/undefined ise işlem başarılı olmuştur.
fs.readFile('data.json', 'utf8', function(err, data) {
if (err) {
console.error('Failed to read file:', err);
return;
}
console.log('File contents:', data);
});Geri Çağırma İşlevleriyle Asenkron Adımlar
Bir asenkron işlem başka bir işlemin sonucuna bağlı olduğunda, geri çağırma işlevlerini iç içe yerleştirirsiniz. Art arda gelen üç adım bile kodu şimdiden karmaşık göstermeye başlar.
getUser(userId, function(err, user) {
if (err) return handleError(err);
getOrders(user.id, function(err, orders) {
if (err) return handleError(err);
getInvoice(orders[0].id, function(err, invoice) {
if (err) return handleError(err);
// Finally use invoice
renderInvoice(invoice);
});
});
});Geri Çağırma Cehennemi — Kıyamet Piramidi
Derin iç içe yerleştirmeye geri çağırma cehennemi veya kıyamet piramidi adı verilir. Sorunlar şunlardır: Her düzeyde kod biraz daha sağa kayar, hata işleme tekrarlanır, akışı takip etmek zorlaşır ve yeniden düzenleme zahmetli hale gelir.
Geri Çağırma Cehenneminin Sorunları
1) Hata işleme, her düzeyde açıkça if(err) yazmayı gerektirir. 2) Hata ayıklamak zordur; yığın izleri mantıksal zinciri göstermez. 3) Kodun yatay katmanlar halinde okunması zordur. 4) Hataları yanlışlıkla gözden kaçırmak kolaydır.
Azaltma: Adlandırılmış İşlevler
İç içe yerleştirilmiş geri çağırma işlevlerini adlandırılmış, üst düzey işlevlere ayırın. Bu, iç içe yerleştirmeyi düzleştirir ve her adımın tek başına sınanabilmesini sağlar; ancak temel eşgüdüm sorununu çözmez.
function onInvoice(err, invoice) {
if (err) return handleError(err);
renderInvoice(invoice);
}
function onOrders(err, orders) {
if (err) return handleError(err);
getInvoice(orders[0].id, onInvoice);
}
function onUser(err, user) {
if (err) return handleError(err);
getOrders(user.id, onOrders);
}
getUser(userId, onUser);Denetim Akışı Kitaplıkları (Tarihsel)
async.js gibi kitaplıklar, geri çağırma işlevi tabanlı akışları yönetmek için yardımcılar (async.waterfall, async.parallel) sağlıyordu. Promise'ler ES2015 ile ortaya çıkmadan önce bu yaklaşım en gelişmiş çözümdü.
Geri Çağırma İşlevleri Neden Ortadan Kalkmıyor
Geri çağırma işlevleri hâlâ her yerde karşınıza çıkar: olay dinleyicileri, dizi yöntemleri, setTimeout ve akış API'lerinin tümü geri çağırma işlevlerini kullanır. Önemli nokta şudur: asenkron sıralama için Promise'ler ve async/await daha üstündür. Basit, tek seferlik olaylar için geri çağırma işlevlerini kullanmaya devam edebilirsiniz.
Geri Çağırmadan Promise'a: Promise'e Dönüştürme
Node.js'in util.promisify() işlevi, hata öncelikli geri çağırma işlevlerini Promise döndüren sürümlere sarar. Böylece eski API'lerle modern async/await kodu arasında bağlantı kurulur.
const { promisify } = require('util');
const readFile = promisify(require('fs').readFile);
async function readConfig() {
const data = await readFile('config.json', 'utf8');
return JSON.parse(data);
}Geri Çağırma İşlevleri Hâlâ Ne Zaman Doğru Seçimdir
Olay dinleyicileri (addEventListener) geri çağırma işlevleri bekler ve bu sorun değildir; çünkü birden çok kez çalışırlar. Akış verisi işleyicileri de geri çağırma işlevleri bekler. Promise'ler tek seferlik asenkron sonuçlardır; geri çağırma işlevleri ise birden çok olaya yapılan aboneliklerdir.
İleriye Giden Yol: Promise'ler ve async/await
ES2015 ile sunulan Promise'ler ve ES2017 ile sunulan async/await, geri çağırma cehennemi sorununu çözdü. Modern JavaScript kodu, art arda gerçekleşen asenkron işlemler için neredeyse her zaman async/await kullanır. Geri çağırma işlevlerini anlamak, eski kodları ve kitaplıkların iç işleyişini okumak için hâlâ önemlidir.
Kısa Kontrol
“Geri çağırma cehennemi” hangi temel sorunu anlatır?
Özet: Geri Çağırma İşlevleri
Geri çağırma işlevleri, daha sonra çağrılmak üzere başka işlevlere geçirilen işlevlerdir. Bunlar özgün asenkron kalıptır. Hata öncelikli geri çağırma işlevleri (err, result), Node.js kuralıdır. Derin iç içe yerleştirme geri çağırma cehennemine yol açar. İç içe yerleştirmeyi düzleştirmek için adlandırılmış işlevler çıkarın. Art arda gerçekleşen asenkron akışlar için Promise'leri ve async/await'i kullanın. Geri çağırma işlevleri olay dinleyicileri ve akışlar için hâlâ uygundur.
Sıkça Sorulan Sorular
“Geri Çağrılar ve Geri Çağrı Cehennemi” dersi ücretsiz mi?
Evet — “Geri Çağrılar ve Geri Çağrı Cehennemi” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Frontend Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Frontend Academy kursu toplamda 4 dersten oluşur.
“Geri Çağrılar ve Geri Çağrı Cehennemi” dersinde ne öğreneceğim?
Geri çağrı tabanlı eşzamansızlığı öğrenin, geri çağrı cehennemi olarak bilinen iç içe geçme sorununu belirleyin ve bunu çözmek için Promise'lerin neden geliştirildiğini görün. Frontend Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Frontend Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Frontend Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.
“Geri Çağrılar ve Geri Çağrı Cehennemi” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Frontend Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Frontend Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Olay Döngüsü: Çağrı Yığını Kuyruğu Mikro Görevler
- Geri Çağrılar ve Geri Çağrı Cehennemi
- Promise'ler: then catch finally Promise.all
- async/await ve Hata Yönetimi