//tips
//smart contract
Node.jsにて定義されている.on、.once、.offなどのevent処理について確認していく。
.onはEventEmitterというクラスからきており、イベントを発火する(emit)とセットで使用される。
対応したイベントの処理をする.onはイベントが発火するまで待ち、イベント発火が確認できたら実行されるもの。関数でも良さそうに感じるが、イベントの中身に、呼び出し元ごとに独自に実行関数をさせたいとなると親側の関数を直接呼び出すことは出来ない関数処理では行き詰まってしまう。
この問題を解決する手法として、EventEmitterが使われることになる。つまり、呼び出し元に依存した関数処理の実行を呼び出し先で行えるのがイベントとなる。
簡単なEventEmitterのコード例をみるとわかりやすい。
class myClass {
constructor(){
this.eventEmitter = new EventEmitter() //イベントエミッターを生成
}
start(msg) {
setInterval(() => {
this.event(msg)
}, 1000)
}
event(msg) {
console.log(msg)
this.eventEmitter.emit('event') //emitでイベントを発火
}
}
const test = new myClass()
const event = test.eventEmitter //イベントエミッターをもらう
test.start('Hello')
event.on('event',()=>{ //onで発火したイベントを受け取る
console.log(new Date()) //ここに自由に追加の処理を書く
})
他にもこのようなものもある。
eventEmitter.on('setting', (obj, version) => {
console.log('name: ' + obj.name + ' message: ' + obj.message);
console.log('This version is ' + version);
});
eventEmitter.emit('setting', {name: 'event setting', message: 'Hello!!'}, '1.3.4');
.onceは一度だけ呼び出される.onでだと思っておけばよく、このメソッドを使って登録された listener は、1 度実行されたら、2 回目以降の event の発火では無視される。
リスナーの追加と削除はaddListenerとremoveListenerメソッド。