문제

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?

도움이 되었습니까?

해결책

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

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top