compromiso.Por eventos en Node.js
-
29-09-2019 - |
Pregunta
Vamos a tomar como ejemplo stdin.on
. Devoluciones de llamada a pila stdin.on
, por lo que si escribo (en CoffeeScript)
stdin = process.openStdin()
stdin.setEncoding 'utf8'
stdin.on 'data', (input) -> console.log 'One'
stdin.on 'data', (input) -> console.log 'Two'
A continuación, cada vez que pulse la tecla Intro en el indicador, lo entiendo
One
Two
Mi pregunta es, ¿hay alguna manera de eliminar / reemplazar una devolución de llamada una vez unido? O es el único enfoque para unir una devolución de llamada proxy y administrar el estado mismo?
Solución
Se puede utilizar removeListener(eventType, callback)
para eliminar un evento, que debe trabajar con todo tipo de emisores.
Ejemplo a partir de los documentos de la API:
var callback = function(stream) {
console.log('someone connected!');
};
server.on('connection', callback);
// ...
server.removeListener('connection', callback);
Así que hay que tener una variable que contiene una referencia a la devolución de llamada, porque, obviamente, es lo contrario imposible decir cuál de devolución de llamada que desea han eliminado.
Editar
Debe ser alguien como este en 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'
Ver: http://nodejs.org/docs/latest/api/events.html # emitter.removeListener
Otros consejos
O puede usar:
stdin.once
en lugar de stdin.on