【问题标题】:Unbinding events in Node.jsNode.js 中的解除绑定事件
【发布时间】:2011-05-17 08:26:40
【问题描述】:

我们以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

我的问题是,有没有办法在绑定后删除/替换回调?还是自己绑定代理回调和管理状态的唯一方法?

【问题讨论】:

  • 如何移除内联监听函数?喜欢server.on('connect', function(pkt){...});

标签: javascript node.js coffeescript dom-events


【解决方案1】:

您可以使用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

【讨论】:

  • 谢谢,这很有道理!
  • 这很好用,但是有没有办法删除内联侦听器函数?喜欢server.on('connect', function(pkt){...});
【解决方案2】:

或者你可以使用:

stdin.once 而不是stdin.on

【讨论】:

    猜你喜欢
    • 2020-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-05
    • 1970-01-01
    • 1970-01-01
    • 2012-01-30
    • 1970-01-01
    相关资源
    最近更新 更多