Node.js 中解除事件绑定
我们以 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'
那么每次我在提示符下按 return 时,我都会得到
One
Two
我的问题是,有没有办法在绑定后删除/替换回调?或者是绑定代理回调并自己管理状态的唯一方法?
Let's take stdin.on
as an example. Callbacks to stdin.on
stack, so if I write (in CoffeeScript)
stdin = process.openStdin()
stdin.setEncoding 'utf8'
stdin.on 'data', (input) -> console.log 'One'
stdin.on 'data', (input) -> console.log 'Two'
then every time I hit return at the prompt, I get
One
Two
My question is, is there any way to remove/replace a callback once bound? Or is the only approach to bind a proxy callback and manage state myself?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您可以使用removeListener(eventType,callback)来删除事件,该事件应该适用于所有类型的发射器。
API 文档中的示例:
因此,您需要一个变量来保存对回调的引用,因为显然,否则无法判断您想要删除哪个回调。
编辑
CS中应该是这样的人:
参见:http://nodejs.org/docs/latest/ api/events.html#emitter.removeListener
You can use
removeListener(eventType, callback)
to remove an event, which should work with all kinds of emitters.Example from the API docs:
So you need to have a variable that holds a reference to the callback, because obviously, it's otherwise impossible to tell which callback you want to have removed.
EDIT
Should be someone like this in CS:
See: http://nodejs.org/docs/latest/api/events.html#emitter.removeListener
或者您可以使用:
stdin.once
而不是stdin.on
Or you can use:
stdin.once
instead ofstdin.on