Question

Let prendre la stdin.on à titre d'exemple. Callbacks à pile stdin.on, donc si je écriture (en CoffeeScript)

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

alors chaque fois que je frappe le retour à l'invite, je reçois

One
Two

Ma question est, est-il possible de supprimer / remplacer un rappel une fois lié? Ou est la seule approche pour lier un rappel proxy et gérer l'état moi-même?

Était-ce utile?

La solution

Vous pouvez utiliser removeListener(eventType, callback) pour supprimer un événement qui devrait fonctionner avec tous les types d'émetteurs.

Exemple de l'API docs:

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

Vous avez donc besoin d'avoir une variable qui contient une référence à la fonction de rappel, car il est évident, il est par ailleurs impossible de dire quel rappel vous voulez avoir supprimé.

EDIT Devrait être quelqu'un comme ça dans 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'

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

Autres conseils

Ou vous pouvez utiliser:

stdin.once au lieu de stdin.on

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top