événements déliaison dans Node.js
-
29-09-2019 - |
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?
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