2013-02-25 66 views
2

嘗試使用此代碼刪除監聽器:節點的removeListener不起作用

var EventEmitter = require('events').EventEmitter; 

var emitter = new EventEmitter; 

emitter.on('message', function(text) 
{ 
     console.log(text); 
}); 

setInterval(function() 
{ 
     emitter.emit('message', Date.now()); 
}, 300); 

setTimeout(function() 
{ 
     emitter.removeListener('message', function() 
     { 
       console.log('removing "message" listener'); 
     }); 
}, 1000); 

它不破的時間間隔,我的節點版本:v0.8.11

閱讀文檔,我認爲這是確定: http://nodejs.org/api/events.html#events_emitter_removelistener_event_listener

回答

9

您需要將相同的功能傳遞給removeListener,因此在這種情況下,您不能使用匿名函數。

這裏有一個工作版本:

var EventEmitter = require('events').EventEmitter; 

var emitter = new EventEmitter; 

function listener(text) { 
    console.log(text); 
} 

emitter.on('message', listener); 

setInterval(function() { 
    emitter.emit('message', Date.now()); 
}, 300); 

setTimeout(function() { 
    console.log("removing"); 
    emitter.removeListener('message', listener); 
}, 1000);