我们以stdin.on
为例。回调到stdin.on
堆栈,所以如果我写(在CoffeeScript中)
stdin = process.openStdin()
stdin.setEncoding 'utf8'
stdin.on 'data', (input) -> console.log 'One'
stdin.on 'data', (input) -> console.log 'Two'
然后每当我在提示符下返回时,我都会
One
Two
我的问题是,有没有办法在绑定后删除/替换回调?或者是自己绑定代理回调和管理状态的唯一方法吗?
答案 0 :(得分:34)
您可以使用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
答案 1 :(得分:16)
或者您可以使用:
stdin.once
代替stdin.on