2013-02-25 65 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);