Node.js イベントエミッター
ブラウザで JavaScript を使ったことがあるなら、ユーザーインタラクションの多くがイベントを通して処理されることをご存知でしょう。マウスクリック、キーボードのボタン押下、マウスの動きへの反応などです。
バックエンド側では、Node.js はevents
モジュールを使用して同様のシステムを構築するオプションを提供しています。
このモジュールは、特に、イベントの処理に使用する EventEmitter
クラスを提供しています。
以下を使用して初期化します。
const EventEmitter = require('node:events');
const eventEmitter = new EventEmitter();
このオブジェクトは、特に`on`メソッドと`emit`メソッドを公開しています。
- `emit`はイベントをトリガーするために使用されます。
- `on`は、イベントがトリガーされたときに実行されるコールバック関数を追加するために使用されます。
たとえば、`start`イベントを作成し、サンプルとして、コンソールにログを出力することによって反応してみましょう。
eventEmitter.on('start', () => {
console.log('started');
});
以下を実行すると
eventEmitter.emit('start');
イベントハンドラ関数がトリガーされ、コンソールログが表示されます。
`emit()`に追加の引数として渡すことで、イベントハンドラに引数を渡すことができます。
eventEmitter.on('start', number => {
console.log(`started ${number}`);
});
eventEmitter.emit('start', 23);
複数の引数
eventEmitter.on('start', (start, end) => {
console.log(`started from ${start} to ${end}`);
});
eventEmitter.emit('start', 1, 100);
EventEmitter オブジェクトは、イベントを操作するための他のいくつかのメソッドも公開しています。例:
- `once()`: 1 回限りのリスナーを追加する
- `removeListener()` / `off()`: イベントからイベントリスナーを削除する
- `removeAllListeners()`: イベントのすべてのリスナーを削除する
これらのメソッドの詳細については、公式ドキュメントを参照してください。