コンテンツにスキップ

events

Since v8.0.75

eventsモジュールは、JSHで使用できるシンプルなEventEmitter実装を提供します。 複数のJSH組み込みモジュールが、イベント駆動APIの基底クラスとしてこの実装を使用します。

一般的な使用方法は以下のとおりです。

const EventEmitter = require('events');

EventEmitter

新しいイベントエミッターのインスタンスを作成します。

構文
new EventEmitter()

イベント名ごとにリスナーを保存します。変更を行うメソッドの多くはエミッター自身を返すため、呼び出しを連鎖できます。

on()

イベントリスナーを登録します。

構文
emitter.on(event, listener)

listenerは関数である必要があります。それ以外はTypeErrorが発生します。

addListener()

on()の別名です。

構文
emitter.addListener(event, listener)

once()

1回だけ実行するリスナーを登録します。

構文
emitter.once(event, listener)

最初の呼び出し後に自動的に削除されます。

removeListener()

一致するリスナーを1つ削除します。

構文
emitter.removeListener(event, listener)

off()

removeListener()の別名です。

構文
emitter.off(event, listener)

removeAllListeners()

指定したイベントのすべてのリスナーを削除します。引数を省略すると、すべてのイベントリスナーを削除します。

構文
emitter.removeAllListeners()
emitter.removeAllListeners(event)

emit()

イベントを発生させ、残りの引数をリスナーに渡します。

構文
emitter.emit(event, ...args)
戻り値
  • 対応するイベントにリスナーが1つ以上ある場合はtrue
  • ない場合はfalse

error以外のイベント処理中にリスナーが例外をスローし、エミッターにerrorリスナーがある場合は、emit('error', err)でそのエラーを渡します。

状態取得ヘルパー

listeners()

指定したイベントに登録済みのリスナー配列の浅いコピーを返します。

emitter.listeners(event)

listenerCount()

イベントに登録済みのリスナー数を返します。

emitter.listenerCount(event)

eventNames()

現在登録済みのイベント名一覧を返します。

emitter.eventNames()

リスナー数の制限

setMaxListeners()

リスナー数の警告しきい値を設定します。

emitter.setMaxListeners(n)

getMaxListeners()

現在のリスナー数の警告しきい値を返します。

emitter.getMaxListeners()

既定の最大値は、イベントごとに10個です。 この上限を超えると、console.warn()で警告を出力しますが、リスナーの登録自体は阻止しません。

使用例

1
2
3
4
5
6
7
8
9
const EventEmitter = require('events');

const emitter = new EventEmitter();
emitter.on('greet', function(name) {
    console.println('Hello, ' + name + '!');
});

emitter.emit('greet', 'Alice');
emitter.emit('greet', 'Bob');

once() 例

1
2
3
4
5
6
7
8
9
const EventEmitter = require('events');

const emitter = new EventEmitter();
emitter.once('greet', function(name) {
    console.println('Hello, ' + name + '!');
});

emitter.emit('greet', 'Alice');
emitter.emit('greet', 'Bob');

動作に関する注意

  • このモジュールは、EventEmitterクラスを直接エクスポートします。
  • これは軽量な実装であり、Node.jsのeventsを完全に置き換えるものではありません。
  • emit()ではリスナー配列をコピーして走査するため、イベント発生中にリスナーを削除しても、その回の配信には影響しません。
  • リスナー数超過の警告のみを行い、登録自体はブロックしません。
最終更新日