Node.js - Etkinlik Verici
Bir Düğümdeki birçok nesne, örneğin bir net.Server olayları yayar, bir eş ona her bağlandığında bir olay yayar, bir fs.readStream dosya açıldığında bir olay yayar. Olayları yayan tüm nesneler olayların örnekleridir.
EventEmitter Sınıfı
Önceki bölümde gördüğümüz gibi EventEmitter sınıfı, events modülünde yer almaktadır. Aşağıdaki kod aracılığıyla erişilebilir -
// Import events module
var events = require('events');
// Create an eventEmitter object
var eventEmitter = new events.EventEmitter();
Bir EventEmitter örneği herhangi bir hatayla karşılaştığında, bir 'hata' olayı yayınlar. Yeni bir dinleyici eklendiğinde 'newListener' olayı tetiklenir ve bir dinleyici kaldırıldığında 'removeListener' olayı tetiklenir.
EventEmitter, aşağıdaki gibi birden çok özellik sağlar: on ve emit. on özellik, bir işlevi olayla bağlamak için kullanılır ve emit bir olayı tetiklemek için kullanılır.
Yöntemler
Sr.No. | Yöntem ve Açıklama |
---|---|
1 | addListener(event, listener) Belirtilen olay için dinleyici dizisinin sonuna bir dinleyici ekler. Dinleyicinin önceden eklenip eklenmediğini görmek için hiçbir kontrol yapılmaz. Aynı olay ve dinleyici kombinasyonunu geçiren birden çok çağrı, dinleyicinin birden çok kez eklenmesine neden olur. Yayıcıyı döndürür, böylece çağrılar zincirlenebilir. |
2 | on(event, listener) Belirtilen olay için dinleyici dizisinin sonuna bir dinleyici ekler. Dinleyicinin önceden eklenip eklenmediğini görmek için hiçbir kontrol yapılmaz. Aynı olay ve dinleyici kombinasyonunu geçiren birden çok çağrı, dinleyicinin birden çok kez eklenmesine neden olur. Yayıcıyı döndürür, böylece çağrılar zincirlenebilir. |
3 | once(event, listener) Etkinliğe bir defalık dinleyici ekler. Bu dinleyici, yalnızca olay bir sonraki tetiklendiğinde çağrılır ve ardından kaldırılır. Yayıcıyı döndürür, böylece çağrılar zincirlenebilir. |
4 | removeListener(event, listener) Belirtilen olay için dinleyici dizisinden bir dinleyiciyi kaldırır. Caution −Dinleyicinin arkasındaki dinleyici dizisindeki dizi indekslerini değiştirir. removeListener, dinleyici dizisinden bir dinleyicinin en fazla bir örneğini kaldırır. Belirtilen olay için dinleyici dizisine birden çok kez tek bir dinleyici eklenmişse, her örneği kaldırmak için removeListener'ın birden çok kez çağrılması gerekir. Yayıcıyı döndürür, böylece çağrılar zincirlenebilir. |
5 | removeAllListeners([event]) Tüm dinleyicileri veya belirtilen olayın dinleyicilerini kaldırır. Kodun başka bir yerine eklenen dinleyicileri, özellikle sizin oluşturmadığınız bir yayıcıda (örneğin, soketler veya dosya akışları) kaldırmak iyi bir fikir değildir. Yayıcıyı döndürür, böylece çağrılar zincirlenebilir. |
6 | setMaxListeners(n) Belirli bir olay için 10'dan fazla dinleyici eklenirse, EventEmitters varsayılan olarak bir uyarı yazdıracaktır. Bu, bellek sızıntılarını bulmaya yardımcı olan kullanışlı bir varsayılandır. Açıktır ki tüm Emitörler 10 ile sınırlandırılmamalıdır. Bu fonksiyon, bunun artırılmasına izin verir. Sınırsız için sıfıra ayarlayın. |
7 | listeners(event) Belirtilen olay için bir dinleyici dizisi döndürür. |
8 | emit(event, [arg1], [arg2], [...]) Her bir dinleyiciyi sağlanan bağımsız değişkenlerle sırayla çalıştırın. Etkinliğin dinleyicileri varsa doğru, aksi takdirde yanlış döndürür. |
Sınıf Yöntemleri
Sr.No. | Yöntem ve Açıklama |
---|---|
1 | listenerCount(emitter, event) Belirli bir olay için dinleyici sayısını döndürür. |
Etkinlikler
Sr.No. | Olaylar ve Açıklama |
---|---|
1 | newListener
Bu olay, bir dinleyici eklendiğinde yayınlanır. Bu olay tetiklendiğinde, dinleyici, olay için dinleyici dizisine henüz eklenmemiş olabilir. |
2 | removeListener
Bu olay, birisi bir dinleyiciyi kaldırdığında yayınlanır. Bu olay tetiklendiğinde, dinleyici olay için dinleyiciler dizisinden henüz çıkarılmamış olabilir. |
Misal
Aşağıdaki Node.js koduyla main.js adlı bir js dosyası oluşturun -
var events = require('events');
var eventEmitter = new events.EventEmitter();
// listener #1
var listner1 = function listner1() {
console.log('listner1 executed.');
}
// listener #2
var listner2 = function listner2() {
console.log('listner2 executed.');
}
// Bind the connection event with the listner1 function
eventEmitter.addListener('connection', listner1);
// Bind the connection event with the listner2 function
eventEmitter.on('connection', listner2);
var eventListeners = require('events').EventEmitter.listenerCount
(eventEmitter,'connection');
console.log(eventListeners + " Listner(s) listening to connection event");
// Fire the connection event
eventEmitter.emit('connection');
// Remove the binding of listner1 function
eventEmitter.removeListener('connection', listner1);
console.log("Listner1 will not listen now.");
// Fire the connection event
eventEmitter.emit('connection');
eventListeners = require('events').EventEmitter.listenerCount(eventEmitter,'connection');
console.log(eventListeners + " Listner(s) listening to connection event");
console.log("Program Ended.");
Şimdi sonucu görmek için main.js'yi çalıştırın -
$ node main.js
Çıkışı doğrulayın.
2 Listner(s) listening to connection event
listner1 executed.
listner2 executed.
Listner1 will not listen now.
listner2 executed.
1 Listner(s) listening to connection event
Program Ended.