2012-02-24 5 views
2

イベントエミッタをリッスンするクラスがある場合、すべてのインスタンスをバインドするのは間違っていますか?node.jsイベントエミッタがマルチインスタンスにバインドする

function MyClass() { 

    emitter.on('ready', function() { 
    // do something 
    }); 

} 

myclass = new MyClass(); 

私がemitter.on()を複数回呼び出すと、警告が表示されます。

(ノード)警告:可能EventEmitterメモリリークが検出されました。 11 リスナーが追加されました。 limitを増やすにはemitter.setMaxListeners()を使用してください。

イベントエミッタは、クラスインスタンス外でモジュールごとに1回のみバインドされることを意味していますか?

これが間違っている場合、イベントが発生したときにクラスインスタンスにアクセスするにはどうすればよいですか?

おかげ

答えて

3

警告はあなたが単一のイベント・エミッターにreadyイベントに11イベントlisteneresを取り付けることです。

一般に、単一のイベントエミッタで同じイベントを何回も聴くと、それはバグかもしれません。たとえば、HTTPイベントエミッタを持っているとします.イベントを11回聞くと、それはおそらくバグでしょう。リクエストを1回聞いて処理したいだけです。

これはデバッグツールです。あなたは、

emitter.setMaxListeners(500); // or whatever you think is a sensible limit

+1

おかげレイノスを行うことによってこの問題を回避することができます私は私が何か間違ったことをやっていた考えていました。 – Tim

+0

パーティーに遅れていますが、 'setMaxListeners(0)'は警告を完全に無効にすることにも注意してください。 – qubyte

+0

これは 'setMaxListeners(Infinity)'と同じです – Raynos

関連する問題