2016-12-24 4 views
1

アスタリスク'*'をイベントとしてEventEmitter.emitと呼ぶことを意味するものが理解できないオープンソースプロジェクトのコードスニペットを理解しようとしています名。NodeJS EventEmitter:イベント名を「*」(アスタリスク)として使用

一部のライブラリ(JQueryなど)では、イベント名として'*'は「すべてのイベント」を意味します。

EventEmitterのコンテキスト内ではどういう意味ですか?

私はこのプロジェクトで'*'イベントのリスナーを見つけようとしましたが、運がありませんでした。

+0

プロジェクトへのリンクを投稿することができますか? – nem035

+0

@ nem035 - ありがとうございました!プロジェクトのリンク - github.com/liangzeng/cqrs –

答えて

0
class BlaBla extends EventEmitter { 

    methodCall(event){ 
     this.emit("*", {event}); // <- what does this mean ??? 
    } 
} 

this.emit("*", {event});はEMIT()メソッドを呼び出すと、この方法で登録されているすべての機能を実行することを意味します。

+0

[コード](https://github.com/nodejs/node/blob/master/lib/events.js#L136)を見て、REPLでそれを実行すると、それはここでは当てはまりません。 – nem035

0

イベント名として'*'を使用しても特別な効果はありませんが、通常のイベントとして動作します。

あなたが event emitter codeを見て、唯一の特別なイベント名があることがわかります

  • 'error' - エラーが
  • 'newListener'発生したときに放出される - 新しいリスナーが
  • 'removeListener'
  • に追加されたときに放出されます - 既存のリスナーが削除されたときに放出される

例(repl.it code

const { 
    EventEmitter 
} = require('events'); 

class BlaBla extends EventEmitter { 

    methodCall(stuff) { 
    this.emit("*", { 
     stuff // <-- this gets passed as an argument to the handler for the '*' event 
    }); 
    } 
} 

const b = new BlaBla(); 

b.on('a', (...args) => console.log('nope', ...args)); // <-- this doesn't run 
b.on('b', (...args) => console.log('nope', ...args)); // <-- this doesn't run 
b.on('*', (...args) => console.log('this gets called', ...args)); // <-- This runs 

b.methodCall('this gets passed down'); 

出力

this gets called { stuff: 'this gets passed down' } 

this.emit('*')が呼び出されたときに、すべてのイベントハンドラが呼び出される。この特定のプロジェクトでの場合、彼らはおそらく、手動でこれをやっています。ここで

は、それがどのように行うことができるかの簡単な例です:

const eventNames = ['a', 'b', 'c']; 

this.on('*',() => 
    eventNames.forEach(event => this.emit(event)) 
); 
関連する問題