3.1. Callback Kavramı

Callback işlemi eşzamansız bir işlevdir. Belirli bir görevin tamamlanması (Örneğin istemciden bir dosya istendi ve dosya sunucu da hazır ve gönderilmeyi bekliyor) sonrası bir callback işlevi çağrılır. Node.js callback işlemini çok fazla şekilde kullanır. Node.js tüm API’leri callback işlevini destekler.

Bir eşzamanlı (blocking) örneği:

Bir metin.txt adında metin dosyamız olsun. Dosya içeriği:

Dosya okuma kodu:

readFileSync komutuna dikkat edelim. Bu komuttaki Sync kısaltması işlevin senkron bir şekilde gösterir. Başka bir deyişle işlem non-bloking yani eşzamansız yapılır. Console.log komutu ile bir anlamda sunucu tarafındaki console ekranına çıktı alırız.  Önce data içindeki veri sonra da “Program Bitti” yazısı sırasıyla ekrana yazdırır. Başka bir deyişle, işlem sıra ile olur.  Bu örneklerde çıktıyı genelde sunucu tarafına alacağız.

Bir eşzamansız örneği:

Aynı metni birde asenkron olarak okuyalım.

readFile işlemi başladıktan sonra function ile dönen data beklenir. Bu durumda data okunamazsa err, okunursa data değişkeni veri içerir.

Bu iki örnek, eşzamanlı ve eşzamansız çağrılar kavramını açıklamaktadır. Birinci örnek programın dosyayı okuyana kadar programın bloklandığını ve daha sonra sadece programın sonuna kadar devam ettiğini göstermektedir. İkinci örnekte ise programın dosya okumayı beklemediğini ve “Program Bitti” yazısını almaya devam ettiğini ve eşzamansız programın dosyayı okumaya devam ettiğini gösterir. Başka bir deyişle, ikinci örnekte program çalışmaya devam edecek ve alt satırlar yorumlanacaktır. Okuma işlemi bitince ise callback mekanizması devreye girecektir.

Bir eşzamanlı program sırayla çok daha uzun süre çalışır. Ancak, eşzamansız programlar sırayla çalışmaz. Eşzamasız programların sorunu: birinci program okuma işlevini bitirip ikinci programa veri aktarması sırasında ortaya çıkar. İkinci program eşzamansız çalışırsa ve birinci program veriyi hazırlayamadıysa sorun ortaya çıkar. İkinci program çalışmaya başlamıştır ve ortada ne yazık ki bir veri yoktur. Bu durumda, sıralı bir şekilde kodları çalıştırmak için eşzamanlı programlama düşünülebilir. Ancak programların arasında bir veri iletişimi yoksa kesinlikle eşzamanlı programlama düşünülmelidir.