Node.js - Emisor de eventos
Muchos objetos en un nodo emiten eventos, por ejemplo, un net.Server emite un evento cada vez que un par se conecta a él, un fs.readStream emite un evento cuando se abre el archivo. Todos los objetos que emiten eventos son instancias de events.EventEmitter.
EventEmitter (clase)
Como hemos visto en la sección anterior, la clase EventEmitter se encuentra en el módulo de eventos. Es accesible a través del siguiente código:
// Import events module
var events = require('events');
// Create an eventEmitter object
var eventEmitter = new events.EventEmitter();
Cuando una instancia de EventEmitter enfrenta algún error, emite un evento de 'error'. Cuando se agrega un nuevo oyente, se activa el evento 'newListener' y cuando se elimina un oyente, se activa el evento 'removeListener'.
EventEmitter proporciona múltiples propiedades como on y emit. on La propiedad se usa para vincular una función con el evento y emit se utiliza para disparar un evento.
Métodos
No Señor. | Método y descripción |
---|---|
1 | addListener(event, listener) Agrega un oyente al final de la matriz de oyentes para el evento especificado. No se realizan comprobaciones para ver si ya se ha añadido el oyente. Varias llamadas que pasan la misma combinación de evento y escucha darán como resultado que el oyente se agregue varias veces. Devuelve el emisor, por lo que las llamadas se pueden encadenar. |
2 | on(event, listener) Agrega un oyente al final de la matriz de oyentes para el evento especificado. No se realizan comprobaciones para ver si ya se ha añadido el oyente. Varias llamadas que pasan la misma combinación de evento y escucha darán como resultado que el oyente se agregue varias veces. Devuelve el emisor, por lo que las llamadas se pueden encadenar. |
3 | once(event, listener) Agrega un oyente único al evento. Este oyente se invoca solo la próxima vez que se activa el evento, después de lo cual se elimina. Devuelve el emisor, por lo que las llamadas se pueden encadenar. |
4 | removeListener(event, listener) Elimina un oyente de la matriz de oyentes para el evento especificado. Caution −Cambia los índices de la matriz en la matriz de escucha detrás de la escucha. removeListener eliminará, como máximo, una instancia de un oyente de la matriz de oyentes. Si se ha agregado un solo oyente varias veces a la matriz de oyentes para el evento especificado, entonces se debe llamar a removeListener varias veces para eliminar cada instancia. Devuelve el emisor, por lo que las llamadas se pueden encadenar. |
5 | removeAllListeners([event]) Elimina todos los oyentes o los del evento especificado. No es una buena idea eliminar los oyentes que se agregaron en otra parte del código, especialmente cuando está en un emisor que usted no creó (por ejemplo, sockets o flujos de archivos). Devuelve el emisor, por lo que las llamadas se pueden encadenar. |
6 | setMaxListeners(n) De forma predeterminada, EventEmitters imprimirá una advertencia si se agregan más de 10 oyentes para un evento en particular. Este es un valor predeterminado útil que ayuda a encontrar pérdidas de memoria. Obviamente, no todos los Emisores deben limitarse a 10. Esta función permite aumentar esa cifra. Establecer en cero para ilimitado. |
7 | listeners(event) Devuelve una matriz de oyentes para el evento especificado. |
8 | emit(event, [arg1], [arg2], [...]) Ejecute cada uno de los oyentes en orden con los argumentos proporcionados. Devuelve verdadero si el evento tenía oyentes, falso en caso contrario. |
Métodos de clase
No Señor. | Método y descripción |
---|---|
1 | listenerCount(emitter, event) Devuelve el número de oyentes de un evento determinado. |
Eventos
No Señor. | Eventos y descripción |
---|---|
1 | newListener
Este evento se emite cada vez que se agrega un oyente. Cuando se activa este evento, es posible que el oyente aún no se haya agregado a la matriz de oyentes del evento. |
2 | removeListener
Este evento se emite cada vez que alguien elimina un oyente. Cuando se activa este evento, es posible que el oyente aún no se haya eliminado de la matriz de oyentes del evento. |
Ejemplo
Cree un archivo js llamado main.js con el siguiente código Node.js:
var events = require('events');
var eventEmitter = new events.EventEmitter();
// listener #1
var listner1 = function listner1() {
console.log('listner1 executed.');
}
// listener #2
var listner2 = function listner2() {
console.log('listner2 executed.');
}
// Bind the connection event with the listner1 function
eventEmitter.addListener('connection', listner1);
// Bind the connection event with the listner2 function
eventEmitter.on('connection', listner2);
var eventListeners = require('events').EventEmitter.listenerCount
(eventEmitter,'connection');
console.log(eventListeners + " Listner(s) listening to connection event");
// Fire the connection event
eventEmitter.emit('connection');
// Remove the binding of listner1 function
eventEmitter.removeListener('connection', listner1);
console.log("Listner1 will not listen now.");
// Fire the connection event
eventEmitter.emit('connection');
eventListeners = require('events').EventEmitter.listenerCount(eventEmitter,'connection');
console.log(eventListeners + " Listner(s) listening to connection event");
console.log("Program Ended.");
Ahora ejecute main.js para ver el resultado:
$ node main.js
Verifique la salida.
2 Listner(s) listening to connection event
listner1 executed.
listner2 executed.
Listner1 will not listen now.
listner2 executed.
1 Listner(s) listening to connection event
Program Ended.