Domanda

Let prendere stdin.on come esempio. Callback a pila stdin.on, quindi se scrivo (in CoffeeScript)

stdin = process.openStdin()
stdin.setEncoding 'utf8'
stdin.on 'data', (input) -> console.log 'One'
stdin.on 'data', (input) -> console.log 'Two'

allora ogni volta che mi ha colpito di ritorno al prompt, ottengo

One
Two

La mia domanda è, c'è qualche modo per rimuovere / sostituire un callback volta legato? O è l'unico approccio per associare un callback proxy e gestire lo stato me stesso?

È stato utile?

Soluzione

È possibile utilizzare removeListener(eventType, callback) per rimuovere un evento, che dovrebbe funzionare con tutti i tipi di emettitori.

Esempio dalla documentazione API:

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

Quindi, è necessario disporre di una variabile che contiene un riferimento al callback, perché ovviamente, è altrimenti impossibile dire quale richiamata si desidera avere rimosso.

Modifica
Dovrebbe essere qualcuno come questo 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

Altri suggerimenti

In alternativa si può usare:

stdin.once invece di stdin.on

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top