Node.js-イベントエミッター

ノード内の多くのオブジェクトはイベントを発行します。たとえば、net.Serverはピアが接続するたびにイベントを発行し、fs.readStreamはファイルが開かれたときにイベントを発行します。イベントを発行するすべてのオブジェクトは、events.EventEmitterのインスタンスです。

EventEmitterクラス

前のセクションで見たように、EventEmitterクラスはeventsモジュールにあります。次のコードからアクセスできます-

// Import events module
var events = require('events');

// Create an eventEmitter object
var eventEmitter = new events.EventEmitter();

EventEmitterインスタンスがエラーに直面すると、「エラー」イベントを発行します。新しいリスナーが追加されると、「newListener」イベントが発生し、リスナーが削除されると、「removeListener」イベントが発生します。

EventEmitterは、次のような複数のプロパティを提供します on そして emiton プロパティは、関数をイベントにバインドするために使用され、 emit イベントを発生させるために使用されます。

メソッド

シニア番号 方法と説明
1

addListener(event, listener)

指定されたイベントのlisteners配列の最後にリスナーを追加します。リスナーがすでに追加されているかどうかを確認するためのチェックは行われません。イベントとリスナーの同じ組み合わせを渡す複数の呼び出しにより、リスナーが複数回追加されます。エミッタを返すため、呼び出しを連鎖させることができます。

2

on(event, listener)

指定されたイベントのlisteners配列の最後にリスナーを追加します。リスナーがすでに追加されているかどうかを確認するためのチェックは行われません。イベントとリスナーの同じ組み合わせを渡す複数の呼び出しにより、リスナーが複数回追加されます。エミッタを返すため、呼び出しを連鎖させることができます。

3

once(event, listener)

イベントにワンタイムリスナーを追加します。このリスナーは、次にイベントが発生したときにのみ呼び出され、その後削除されます。エミッタを返すため、呼び出しを連鎖させることができます。

4

removeListener(event, listener)

指定されたイベントのリスナー配列からリスナーを削除します。 Caution −リスナーの背後にあるリスナー配列の配列インデックスを変更します。removeListenerは、リスナー配列からリスナーの最大1つのインスタンスを削除します。指定されたイベントのリスナー配列に単一のリスナーが複数回追加されている場合、各インスタンスを削除するには、removeListenerを複数回呼び出す必要があります。エミッタを返すため、呼び出しを連鎖させることができます。

5

removeAllListeners([event])

すべてのリスナー、または指定されたイベントのリスナーを削除します。コードの他の場所に追加されたリスナーを削除することはお勧めできません。特に、作成していないエミッター(ソケットやファイルストリームなど)にある場合はそうです。エミッタを返すため、呼び出しを連鎖させることができます。

6

setMaxListeners(n)

デフォルトでは、特定のイベントに10を超えるリスナーが追加された場合、EventEmittersは警告を出力します。これは、メモリリークを見つけるのに役立つ便利なデフォルトです。もちろん、すべてのエミッターを10に制限する必要はありません。この機能を使用すると、これを増やすことができます。無制限の場合はゼロに設定します。

7

listeners(event)

指定されたイベントのリスナーの配列を返します。

8

emit(event, [arg1], [arg2], [...])

指定された引数を使用して、各リスナーを順番に実行します。イベントにリスナーがある場合はtrueを返し、それ以外の場合はfalseを返します。

クラスメソッド

シニア番号 方法と説明
1

listenerCount(emitter, event)

指定されたイベントのリスナーの数を返します。

イベント

シニア番号 イベントと説明
1

newListener

  • event −文字列:イベント名

  • listener −関数:イベントハンドラ関数

このイベントは、リスナーが追加されるたびに発行されます。このイベントがトリガーされたとき、リスナーはイベントのリスナーの配列にまだ追加されていない可能性があります。

2

removeListener

  • event −文字列イベント名

  • listener −関数イベントハンドラ関数

このイベントは、誰かがリスナーを削除するたびに発行されます。このイベントがトリガーされたとき、リスナーはイベントのリスナーの配列からまだ削除されていない可能性があります。

次の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.