2012-02-24 61 views
2

如果我有一个侦听事件发射器的类,是否在每个实例上绑定都是错误的做法?node.js事件发射器绑定到多个实例

function MyClass() { 

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

} 

myclass = new MyClass(); 

如果我多次调用emitter.on(),它会发出警告。

(节点)警告:可能发生EventEmitter内存泄漏。已添加11 听众。使用emitter.setMaxListeners()来增加限制。

事件发射器意味着每个模块只绑定一次,而不是类实例?

如果这是错误的,那么当触发事件时如何访问类实例?

感谢

回答

3

的警告是,你在一个单一的事件发射器安装11个事件listeneres到ready事件。

通常,当您在单个事件发布器上多次收听相同的事件时,很可能是一个错误。例如,假设你有一个http事件发射器,如果你在request事件中收听11次这可能是一个错误,那么你只需要一次收听和处理请求。

这是一个调试工具。您可以通过执行

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

+1

谢谢Raynos解决这个问题,我想我是做错了什么。 – Tim 2012-02-24 02:49:20

+0

晚会晚会,但值得注意的是,'setMaxListeners(0)'完全禁用了警告。 – qubyte 2013-01-09 14:18:30

+0

这与'setMaxListeners(Infinity)'相同' – Raynos 2013-01-10 06:35:17