Node.js イベントエミッター
Node.js のすべての非同期 I/O 操作は、完了時にイベントをイベント キューに送信します。
Node.js の多くのオブジェクトはイベントを発行します。net.Server オブジェクトは新しい接続が確立されるたびにイベントを発行し、fs.readStream オブジェクトはファイルが開かれたときにイベントを発行します。 これらのイベント生成オブジェクトはすべて events.EventEmitter のインスタンスです。
EventEmitter クラス
events モジュールは、events.EventEmitter という 1 つのオブジェクトのみを提供します。 EventEmitter の中核は、イベント トリガー関数とイベント リスナー関数のカプセル化です。
このモジュールには、require("events"); を通じてアクセスできます。
// 引入 events 模块 var events = require('events'); // 创建 eventEmitter 对象 var eventEmitter = new events.EventEmitter();
EventEmitter オブジェクトは、インスタンス化中にエラーが発生した場合に「error」イベントをトリガーします。新しいリスナーが追加されると「newListener」イベントが発生し、リスナーが削除されると「removeListener」イベントが発生します。
以下では、簡単な例を使用して EventEmitter の使用法を説明します:
//event.js 文件 var EventEmitter = require('events').EventEmitter; var event = new EventEmitter(); event.on('some_event', function() { console.log('some_event 事件触发'); }); setTimeout(function() { event.emit('some_event'); }, 1000);
実行結果は次のとおりです:
このコードを実行すると、1 秒後にコンソールに 「some_event イベントがトリガーされました」 が出力されます。原則として、イベント オブジェクトがイベント some_event のリスナーを登録し、1000 ミリ秒後に setTimeout を使用してイベント オブジェクトにイベント some_event を送信します。このとき、some_event のリスナーが呼び出されます。
$ node event.js some_event 事件触发
EventEmitter の各イベントは、イベント名といくつかのパラメーターで構成されます。イベント名は通常、特定のセマンティクスを表す文字列です。イベントごとに、EventEmitter は複数のイベント リスナーをサポートします。
イベントがトリガーされると、このイベントに登録されているイベントリスナーが順番に呼び出され、イベントパラメータがコールバック関数のパラメータとして渡されます。
次の例でこのプロセスを説明しましょう:
//event.js 文件 var events = require('events'); var emitter = new events.EventEmitter(); emitter.on('someEvent', function(arg1, arg2) { console.log('listener1', arg1, arg2); }); emitter.on('someEvent', function(arg1, arg2) { console.log('listener2', arg1, arg2); }); emitter.emit('someEvent', 'arg1 参数', 'arg2 参数');
上記のコードを実行すると、実行結果は次のようになります:
$ node event.js listener1 arg1 参数 arg2 参数 listener2 arg1 参数 arg2 参数
上記の例では、エミッターはイベント someEvent に対して 2 つのイベント リスナーを登録し、トリガーしました。 someEvent イベント。
実行結果では、2 つのイベント リスナー コールバック関数が連続して呼び出されていることがわかります。 これは EventEmitter の最も単純な使用法です。
EventEmitter は、on や emit などの複数のプロパティを提供します。 on 関数はイベント関数をバインドするために使用され、emit 属性はイベントをトリガーするために使用されます。次に、EventEmitter のプロパティを詳しく見てみましょう。
メソッド
シリアル番号 | メソッドと説明 |
---|---|
1 | addListener(event,listener) 指定されたイベントのリスナーをリスナー配列の末尾に追加します。 |
2 | on(event,listener) 文字列イベントとコールバック関数を受け入れて、指定されたイベントのリスナーを登録します。 server.on('connection', function (stream) { console.log('someone connected!'); }); |
3 | once(event,listener) 指定されたイベントのワンタイムリスナーを登録します。つまり、リスナーは最大でも 1 回だけトリガーされ、リスナーはトリガー直後に解放されます。 。 server.once('connection', function (stream) { console.log('Ah, we have our first user!'); }); |
4 | removeListener(event,listener) 指定されたイベントのリスナーを削除します。リスナーは、イベントに登録されたリスナーである必要があります。 var callback = function(stream) { console.log('someone connected!'); }; server.on('connection', callback); // ... server.removeListener('connection', callback); |
5 | removeAllListeners([event]) すべてのイベントのすべてのリスナーを削除します。イベントが指定されている場合は、指定されたイベントのすべてのリスナーを削除します。 |
6 | setMaxListeners(n) デフォルトでは、10 を超えるリスナーを追加すると、EventEmitters は警告メッセージを出力します。 setMaxListeners 関数は、リスナー数のデフォルト制限を増やすために使用されます。 |
7 | listeners(event) 指定されたイベントのリスナー配列を返します。 |
emit(event, [arg1], [arg2], [...]) イベントに登録されたリスナーがある場合は true を返し、そうでない場合はパラメータの順序で各リスナーを実行します。 false を返します。 |
メソッドと説明 | |
---|---|
listenerCount(emitter,event)指定されたイベントのリスナーの数を返します。イベント名 |
- イベントを処理します 機能
removeListener |
|