Nodejs-event-emitter
Node.js-イベントエミッター
Nodeの多くのオブジェクトはイベントを発行します。たとえば、net.Serverはピアが接続するたびにイベントを発行し、fs.readStreamはファイルが開かれたときにイベントを発行します。 イベントを発行するすべてのオブジェクトは、events.EventEmitterのインスタンスです。
EventEmitterクラス
前のセクションで見たように、EventEmitterクラスはイベントモジュールにあります。 それは次のコードを介してアクセス可能です-
//Import events module
var events = require('events');
//Create an eventEmitter object
var eventEmitter = new events.EventEmitter();
EventEmitterインスタンスがエラーに直面すると、「エラー」イベントを発行します。 新しいリスナーが追加されると、「newListener」イベントが発生し、リスナーが削除されると、「removeListener」イベントが発生します。
EventEmitterは、 on や emit などの複数のプロパティを提供します。 on プロパティは関数をイベントにバインドするために使用され、 emit はイベントを起動するために使用されます。
方法
Sr.No. | Method & Description |
---|---|
1 |
addListener(event, listener) 指定されたイベントのリスナー配列の最後にリスナーを追加します。 リスナーがすでに追加されているかどうかを確認するチェックは行われません。 イベントとリスナーの同じ組み合わせを渡す複数の呼び出しにより、リスナーが複数回追加されます。 エミッタを返すため、呼び出しを連鎖できます。 |
2 |
on(event, listener) 指定されたイベントのリスナー配列の最後にリスナーを追加します。 リスナーがすでに追加されているかどうかを確認するチェックは行われません。 イベントとリスナーの同じ組み合わせを渡す複数の呼び出しにより、リスナーが複数回追加されます。 エミッタを返すため、呼び出しを連鎖できます。 |
3 |
once(event, listener) ワンタイムリスナーをイベントに追加します。 このリスナーは、次にイベントが発生したときにのみ呼び出され、その後削除されます。 エミッタを返すため、呼び出しを連鎖できます。 |
4 |
removeListener(event, listener) 指定されたイベントのリスナー配列からリスナーを削除します。 *注意-*リスナーの背後にあるリスナー配列の配列インデックスを変更します。 removeListenerは、リスナー配列から最大で1つのリスナーのインスタンスを削除します。 単一のリスナーが指定されたイベントのリスナー配列に複数回追加された場合、removeListenerを複数回呼び出して各インスタンスを削除する必要があります。 エミッタを返すため、呼び出しを連鎖できます。 |
5 |
removeAllListeners([event]) すべてのリスナー、または指定されたイベントのリスナーを削除します。 コードの別の場所に追加されたリスナーを削除することはお勧めできません。特に、作成していないエミッター上にある場合(例: ソケットまたはファイルストリーム)。 エミッタを返すため、呼び出しを連鎖できます。 |
6 |
setMaxListeners(n) デフォルトでは、特定のイベントに10人を超えるリスナーが追加された場合、EventEmittersは警告を出力します。 これは、メモリリークの検出に役立つ便利なデフォルトです。 明らかに、すべてのエミッタが10に制限されるべきではありません。 この機能により、それを増やすことができます。 無制限の場合はゼロに設定します。 |
7 |
listeners(event) 指定されたイベントのリスナーの配列を返します。 |
8 |
emit(event, [arg1], [arg2], […]) 指定された引数を使用して、各リスナーを順番に実行します。 イベントにリスナーがある場合はtrue、そうでない場合はfalseを返します。 |
クラスメソッド
Sr.No. | Method & Description |
---|---|
1 |
listenerCount(emitter, event) 特定のイベントのリスナーの数を返します。 |
イベント
Sr.No. | Events & Description |
---|---|
1 |
newListener
このイベントは、リスナーが追加されるたびに発生します。 このイベントがトリガーされると、リスナーはイベントのリスナーの配列にまだ追加されていない可能性があります。 |
2 |
removeListener
このイベントは、誰かがリスナーを削除するたびに発生します。 このイベントがトリガーされたとき、リスナーはイベントのリスナーの配列からまだ削除されていない可能性があります。 |
例
次のNode.jsコードでmain.jsという名前のjsファイルを作成します-
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.");
次に、main.jsを実行して結果を確認します-
$ node main.js
出力を確認します。
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.