Node.js ortamında birçok nesne olay meydana getirir. Örneğin, bir net.Server her bağlantı için her seferinde bir olay oluşturur. Benzer şekilde fs.readStream dosya açarken bir olay oluşturur. Olay meydana getiren tüm nesneler olaylara örnek olarak gösterilebilir. Bu bölümde olayı meydana getirmek için kullanılan EventEmitter sınıfı incelenecektir.
EventEmitter Sınıfı
EventEmitter sınıfı events modülü içinde bulunur. Daha önceki bölümde gördüğümüz gibi önce require ile bu modül bağlanır ve ardından EventEmitter sınıfından nesne/ler oluşturulabilir.
1 2 |
var events = require('events'); var eventEmitter = new events.EventEmitter(); |
EmitterEmitter sınıfından oluşturulan nesne bir hata ile karşı karşıya kaldığında “error (hata)” olayını çağırır. Yeni bir dinleme eklendiğinde, “newListener” olayı tetiklenir. Dinleme silindiğinde ise “removeListener” olayı tetiklenir. EventEmitter “on” ve “emit” gibi çoklu özelliği sağlar. “on” özelliği bir fonksiyonu olaya bağlamak için kullanılırken “emit” özelliği bir olayı tetiklemek için kullanılır.
EventEmitter Metodları
- on(event, listener): Belirtilen olay için listener dizisinin sonuna bir dinleme ekler. Dinlemenin eklenmiş olup olmadığını görmek için herhangi bir kontrol yapılmaz. Aynı olay ve dinleyiciyi bir araya getiren birden fazla çağrı, dinlemenin birden fazla kez eklenmesine neden olur. Çağrılar zincirlenebilir.
- addListener(event, listener): “on” özelliği için takma ad. (İşlevi aynı)
- once(event, listener): Olaya bir kerelik dinleyici ekler. Bu dinleyici, yalnızca olayı tetiklediğinde, yani kaldırıldıktan sonra çağrılır. Verici gönderir, bu nedenle çağrılar zincirlenebilir.
- removeListener(event, listener): Belirtilen olay için listener dizisinden bir dinleme kaldırır. Listener dizisinin indisleri güncellenir. removeListener, Listener dizisinden en fazla bir örneğini kaldıracaktır. Birden fazla dinlemeyi kaldırmak için removeListener birden çok kez çağrılmalıdır. Yapı, zircirli bir şekilde çalışır.
- removeAllListeners([event]): Belirli bir olay için tüm dinlemeleri kaldırır.
- setMaxListeners(n): Belirli bir olay için 10’dan fazla dinleme eklendiğinde EventEmitter uyarı üretir. Ancak bazı durumlarda 10’dan fazla dinlemeye ihtiyaç olabilir. Bu durumu ayarlamak için bu fonksiyon kullanılır.
- listeners(event): Belirli bir olay için listener dizisini döndürür.
- emit(event, [arg1], [arg2], […]): Argümanlara göre sırayla her dinlemeyi çalıştırır. Eğer dinlemeler var ise true, aksi takdirde false döndürür.
- listenerCount(emitter, event): Verilen bir olay için dinleme sayısını döndürür.
Olaylar
- newListener
- event − String: olay adı
- listener − Function: olay fonksiyonu
- Bir olay bir listener’a eklendikten sonra herhangi bir zamanda ortaya çıkar. Bir olay tetiklendiğinde, dinleyici olayın Listener dizisine henüz eklenmemiş olabilir.
- removeListener
- event − String: olay adı
- listener − Function: olay fonksiyonu
- Bu olay bir dinleme çıkarıldığında ortaya çıkar. Bu olay tetiklendiğinde, listener dizisinden dinleme henüz kaldırılmamış olabilir.
Bir örnek:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
var events = require('events'); var eventEmitter = new events.EventEmitter(); // listener #1 var listner1 = function listner1() { console.log('listner1 calisti.'); } // listener #2 var listner2 = function listner2() { console.log('listner2 calisti.'); } // Baglanti olayini listner1 fonksiyonunu ile baglama eventEmitter.addListener('connection', listner1); // Baglanti olayini listner2 fonksiyonunu ile baglama eventEmitter.on('connection', listner2); var eventListeners = require('events').EventEmitter.listenerCount (eventEmitter,'connection'); console.log(eventListeners + " Listner(s) bagli olayi dinliyor."); // Baglanti olayini tetikle eventEmitter.emit('connection'); // listner1 fonksiyonunun baglantisini kaldir. eventEmitter.removeListener('connection', listner1); console.log("Listner1 artik dinlenmiyor."); // Baglanti olayini tetikle eventEmitter.emit('connection'); eventListeners = require('events').EventEmitter.listenerCount(eventEmitter,'connection'); console.log(eventListeners + " Listner(s) bagli olayi dinliyor."); console.log("Program Bitti."); |