开发者

Unbinding events in Node.js

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 'dat开发者_如何转开发a', (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?


You can use removeListener(eventType, callback) to remove an event, which should work with all kinds of emitters.

Example from the API docs:

var callback = function(stream) {
  console.log('someone connected!');
};
server.on('connection', callback);
// ...
server.removeListener('connection', callback);

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:

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'

See: http://nodejs.org/docs/latest/api/events.html#emitter.removeListener


Or you can use:

stdin.once instead of stdin.on

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜