2010-11-29 15 views
19

Tomemos como ejemplo stdin.on. Devoluciones de llamada a stdin.on pila, por lo que si escribo (en CoffeeScript)Desvinculación de eventos en Node.js

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

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 encuadernado? ¿O es el único método para enlazar una devolución de llamada por proxy y administrar yo mismo el estado?

+0

¿Cómo eliminar funciones de escucha en línea? Me gusta 'server.on ('connect', function (pkt) {...});' – kBisla

Respuesta

29

Puede usar removeListener(eventType, callback) para eliminar un evento, que debería funcionar con todo tipo de emisores.

Ejemplo 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 que sea removida.

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

+0

¡Gracias, eso tiene mucho sentido! –

+1

Esto funciona bien, pero ¿hay alguna manera de eliminar las funciones de escucha en línea? Me gusta 'server.on ('connect', function (pkt) {...});' – kBisla

15

O puede utilizar:

stdin.once en lugar de stdin.on

Cuestiones relacionadas