解除Node.js中的事件
问题描述:
让我们以stdin.on
为例。回调stdin.on
栈,所以如果我写的(在CoffeeScript中)解除Node.js中的事件
stdin = process.openStdin()
stdin.setEncoding 'utf8'
stdin.on 'data', (input) -> console.log 'One'
stdin.on 'data', (input) -> console.log 'Two'
然后每次我打在迅速恢复的时候,我得到
One
Two
我的问题是,有没有办法删除/替换回调一次绑定?或者是自己绑定代理回调和管理状态的唯一方法?
答
您可以使用removeListener(eventType, callback)
删除一个事件,该事件应该适用于各种发射器。从API文档
例子:
var callback = function(stream) {
console.log('someone connected!');
};
server.on('connection', callback);
// ...
server.removeListener('connection', callback);
所以你需要有保存回调的引用的变量,因为很明显,这是否则无法分辨哪个回调要已删除。
编辑
应在CS的人是这样的:
stdin = process.openStdin()
stdin.setEncoding 'utf8'
logger = (input) -> console.log 'One'
stdin.on 'data', logger
stdin.removeListener 'data', logger
stdin.on 'data', (input) -> console.log 'Two'
参见:http://nodejs.org/docs/latest/api/events.html#emitter.removeListener
+0
谢谢,这非常有道理! – 2010-12-01 17:05:54
答
或者你可以使用:的
stdin.once
代替stdin.on
如何去除内联监听器函数? 像`server.on('connect',function(pkt){...});` – kBisla 2016-07-04 13:21:57