节点的removeListener方法无法正常工作。

4

尝试使用以下代码移除监听器:

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

1个回答

20

您需要将相同的函数传递给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);

1
它不起作用。 - Rajat Palankar
我怎样才能在'on'和'removeListener'中传递相同的函数?我想在这两个监听器上执行不同的操作。如何实现这一点? - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接