Cohorts
  • Discover
  • About Us
  • Blog
  • Patika.dev
  • Web3

Node.js

Node.js Nedir?
Çalışma Ortamının Kurulması
Asal Sayılar Çalışması
Node.js REPL Ortamı
Ödev 1 - Node.JS Komut Satırı Kullanımı

Node.js'in Asenkron Yapısı
Callback Nedir?
Promise Nedir?
Async - Await Yapısı
Ödev 2 - Post Sıralama ve Post Ekleme

Olay Odaklı - Bloklamayan
Modül Kavramı
Ödev 3 - Daire Modülü
FS Modülü Kullanımı
Ödev 4 - FS Modülü Çalışması
NPM ve Package.json Kavramları
Request - Response Döngüsü
Bir Web Sunucusu Yazmak
Ödev 5 - Kendi Web Sunucumuz
Express.js Giriş
Ödev 6 - Koa.js ile Web Sunucusu Yazımı

PCAT Proje Tanıtımı
PCAT Projesi Çalışma Ortamı
PCAT Projesi Express Nodemon Kurulumu
Clean Blog Proje - 1. Bölüm - Ödev 7
Statik Dosyalar - Middleware Giriş
Template Engine Kavramı
Clean Blog Proje - 2. Bölüm - Ödev 8
MongoDB Giriş
MongoDB - Compass Kurulumu
Mingo Kurulumu
MongoDB - CRUD İşlemleri
Mongoose CRUD İşlemleri
Request Body Nesnesi
Model ve Dinamik İçerik
Clean Blog Proje - 3. Bölüm - Ödev 9
Tekil Fotoğraf Sayfaları
Clean Blog Proje - 4. Bölüm - Ödev 10
Görsel Yüklemek
Fotoğraf Bilgisi Güncellemek
Fotoğraf Silmek
MVC Yeniden Düzenleme
Clean Blog Proje - 5. Bölüm - Ödev 11
PCAT Sayfalama
Heroku - MongoDB Atlas Deployment
Clean Blog Proje - 6. Bölüm - Ödev 12

Smartedu Projesi Tanıtım
HTTP Durum Kodları
Linkleri Güncellemek
Routing - Yönlendirme
Kurs Modeli
Postman ve API
Kursları Listelemek
Tekil Kurs Sayfası ve Slugify
Kategori Oluşturmak ve Listelemek
Kayıt Sayfası ve Bcrypt Paketi
Giriş Sayfası ve Giriş İşlemi
Session Nedir?
Çıkış İşlemi
Kişiye Özel İçerik
Özel Middleware
Kullanıcı Rolleri
Kurs Oluşturmak
Kurs - Öğretmen İlişkisi
Kurs - Öğrenci İlişkisi
Kurs - Öğrenci İlişkisi II
Search Alanı
İletişim Sayfası ve Mail Göndermek
Bildirim Mesajları
Kayıt ve Kullanıcı Doğrulama
Kurs Silmek
Kurs Güncellemek
Admin Alanı ve Kullanıcı Silmek
Kategori Eklemek ve Silmek
Smartedu Deployment

Callback Nedir?


Node.js'in asenkron yapısı üzerine konuştuğumuzda belirttiğimiz 2 temel konu vardı. Node.js uzun süren işlemlerin tamamlanmasını beklemeden diğer işlere devam etmek ister. Bunun haricinde ise uzun süren işlemler tamamlandığında, bu uzun süren işlemlere bağımlı olan diğer işlemlere devam etmek ister. Buradaki sorumuz ise şu: Bu devam işlemler, uzun süren işlemin tamamlandığını nasıl bilecek? İşte burada callback devreye girer.


Callback Fonksiyon


Callback fonksiyonu başka bir fonksiyon içerisinde argüman olarak kullanılabilen fonksiyon anlamına gelmektedir. Tabii bu şekilde anlamlandırma çok zor, hemen bir örnek yapalım.


function writeName(name, callback) { // writeName fonksiyonu argüman olrak bir callback fonksiyonu alıyor
  callback(name); 
}

function writer(word) { // writer fonksiyonu 
  console.log(word);
}

writeName("Ahmet", writer); // writeName fonksiyonu çalıştırılırken writer fonksiyonu callback işlevi görüyor


Örneğimizde writer "yazıcı" fonksiyonumuz sadece bir iş yapar, aldığı parametreyi yazdırmak. writeName fonksiyonu içinde yapmak istediğimiz iş ise ismimizi yazdırmak, writeName fonksiyonu oluşturmak için bize bir isim ve yazıcı gerek, eee madem hazırda yazıcı fonksiyonumuz var onu kullanabiliriz! İşte bu örneğimizde writeName("Ahmet", writer) çalıştırırken parametre olarak isim ve callback işlevi gören writer fonksiyonunu alıyoruz.


Burada şunu da belirtelim. writer fonksiyonu callback -çağrılan foksiyon- işlevi görürken writeName fonksiyonu başka bir fonksiyonu argüman olarak aldığı için higher order function -yüksek seviyeli fonksiyon- olarak isimlendirilir.


Şimdi daha geniş bir örnek üzerine konuşalım. Senaryomuz şu: Elimizde kitaplarımız var ve bu kitap bilgilerimizi listelemek istiyoruz. İşimiz kolay değil mi? Hemen kodumuzu yazalım.


const books = [
  { name: "Kitap 1", author: "Yazar 1" },
  { name: "Kitap 2", author: "Yazar 2" },
  { name: "Kitap 3", author: "Yazar 3" },
];

const listBooks = () => {
  books.map((book) => {
    console.log(book.name);
  });
};

listBooks();

//Çıktımız
//Kitap 1
//Kitap 2
//Kitap 3


Tamadır, işimizi başarılı bir şekilde tamamladık. Ancak ileride kitap listemize yeni kitaplar eklemeye karar verdik ve uygulamamıza aşağıdaki konu ekledik.


// Yukarıdaki kodun devamı....
const addBook = (newBook) => {
    books.push(newBook)
}

addBook({ name: "Kitap 4", author: "Yazar 4" })

//Çıktımız
//Kitap 1
//Kitap 2
//Kitap 3


Ancak programımızı çalıştırdığımızda çıktımızın değişmediğini görürüz. Acaba addBook fonkaiyonumuzda mı bir hata var, hayır! Şimdi aynı kodu listBooks(); satırı sona gelecek şekilde tekrar çalıştıralım.


//Çıktımız
//Kitap 1
//Kitap 2
//Kitap 3
//Kitap 4


görmüş olduğunuz gibi istediğimiz sonucu aldık. Yalnız burada şu sorunumuz var biz her zaman listBooks(); komutunun daima kodun sonunda olmasında emin olamayız. Burada başka bir yöntem bulmamız gerekir. Evet callback! Biz her yeni kitap eklediğimizde listemizi güncellersek istediğimiz sonucu elde edebiliriz. Bunun için listBooks fonksiyonunu addBook fonksiyonu içerinde callback şeklinde kullanacağız.


const books = [
  { name: "Kitap 1", author: "Yazar 1" },
  { name: "Kitap 2", author: "Yazar 2" },
  { name: "Kitap 3", author: "Yazar 3" },
];

const listBooks = () => {
  books.map((book) => {
    console.log(book.name);
  });
};

const addBook = (newBook, callback) => {
  books.push(newBook);
  callback();
};

addBook({ name: "Kitap 4", author: "Yazar 4" }, listBooks);

//Çıktımız
//Kitap 1
//Kitap 2
//Kitap 3
//Kitap 4


Görmüş olduğunuz gibi her yeni kitap eklediğimizde otomatik olarak kitap listemizi güncellemiş olduk.


Daha Fazlası İçin


  • Arin Yazılım Senkron - Asenkron JS, Call Stack, Thread, Callback

Quiz

Answer the questions to check your understanding.

This lesson includes a short quiz.

Previous
Next

Lesson discussion

Swap insights and ask questions about “Node.js”.

Enroll to participate
Start the course to unlock the discussion. Enrolling helps us keep conversations relevant to learners.
Cohorts
WebsiteDiscoverBlogPatika.devRise In
CoursesCircleRustSoliditySolanaWeb3 FundamentalsBlockchain Basics
CompanyAbout UsTerms of UsePrivacy PolicyGDPR NoticeCookies
Don't miss any update!

Disclaimer: The information, programs, and events provided on https://cohorts.patika.dev is strictly for upskilling and networking purposes related to the technical infrastructure of blockchain platforms. We do not provide financial or investment advice, nor do we make any representations regarding the value, profitability, or future price of any blockchain or cryptocurrency. Users are encouraged to conduct their own research and consult with licensed financial professionals before engaging in any investment activities. https://cohorts.patika.dev disclaims any responsibility for financial decisions made by users based on the information provided here.

© 2026 Cohorts, All rights reserved