2012-02-24 103 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

相關問題