情報アイランド

「情報を制する者は世界を制す」をモットーに様々な情報を提供することを目指すブログです。現在はプログラミング関連情報が多めですが、投資関連情報も取り扱っていきたいです。

Node.jsでイベントにイベントハンドラが登録又は登録解除された時に処理を行う

イベントハンドラ登録時の処理

イベントにイベントハンドラが登録された時にはeventEmitternewListenerイベントが発生します。

そのため、イベントにイベントハンドラが登録された時に処理を行うにはこのイベントにイベントハンドラを登録します。

var events = require('events');

var eventEmitter = new events.EventEmitter();
eventEmitter.on('newListener', function (event, handler) {
});

このイベントハンドラの第1引数はイベント名であり、第2引数はイベントハンドラです。

より正確には、このイベントはイベントにイベントハンドラが登録される直前に発生します。

イベントハンドラ登録解除時の処理

イベントからイベントハンドラが登録解除された時にはeventEmitterremoveListenerイベントが発生します。

そのため、イベントからイベントハンドラが登録解除された時に処理を行うにはこのイベントにイベントハンドラを登録します。

eventEmitter.on('removeListener', function (event, handler) {
});

このイベントハンドラの第1引数はイベント名であり、第2引数はイベントハンドラです。

より正確には、このイベントはイベントからイベントハンドラが登録解除された直後に発生します。

サンプルコード1

event-emitter-event.js

var events = require('events');

var eh1 = function (p) {
    console.log(p.name + ' ' + p.age);
};
var eh2 = function (p) {
    console.log('new person.');

    p.age = 0;
};

var eventEmitter = new events.EventEmitter();
eventEmitter.on('removeListener', function (event, handler) {
    console.log('listener removed: ' + event);
    console.log(eventEmitter.listenerCount(event));
});
var f = false;
eventEmitter.on('newListener', function (event, handler) {
    console.log('listener added: ' + event);
    console.log(eventEmitter.listenerCount(event));
    if (!f) {
        f = true;
        eventEmitter.on('new', eh2);
    }
});
eventEmitter.emit('new', { name: 'nakata', age: 25 });
eventEmitter.on('new', eh1);
eventEmitter.emit('new', { name: 'yamaguti', age: 15 });
eventEmitter.on('new', eh1);
eventEmitter.emit('new', { name: 'sasaki', age: 17 });
eventEmitter.removeListener('new', eh1);
eventEmitter.emit('new', { name: 'nakamura', age: 37 });

実行結果

C:\work\node>node event-emitter-event.js
listener added: new
0
listener added: new
0
new person.
yamaguti 0
listener added: new
2
new person.
sasaki 0
sasaki 0
listener removed: new
2
new person.
nakamura 0

関連

pizyumi
プログラミング歴19年のベテランプログラマー。業務システム全般何でも作れます。現在はWeb系の技術を勉強中。
スポンサーリンク

-Node.js