Un evento, en el contexto de programación y código, es un suceso
de interés al cual nos podemos suscribir y realizar alguna acción en específico,
por ejemplo: En el navegador con JavaScript tenemos la función setInterval(callback,
interval); que dispara un evento al callback cada vez que se cumple el
intervalo especificado.
En Node.js son muy utilizados por el API y de cierta manera
encajan perfectamente con su naturaleza asíncrona, por ejemplo, hay un evento
muy interesante del objeto “process” que se dispara al momento de salir del
entorno de ejecución de Node.js, el evento se llama “exit” y podemos
suscribirnos de la siguiente manera:
process.on(“exit”, function () { console.log(“Saliendo!”); });
La mayoría del API de Node.js utiliza los eventos para informar
cosas interesantes a las cuales podemos suscribirnos y esto es posible gracias
al objeto EventEmitter del módulo events, el cual mediante el método emit permite
disparar eventos a todos los suscriptores. Haz clic aquí para más información sobre este objeto. Sin duda alguna, los eventos son un paradigma muy interesante,
ahora bien, si queremos que nuestros propios objetos generen eventos el proceso
es muy sencillo, basta con “heredar” de la clase EventEmitter, mediante el
método del módulo util “inherits” y luego disparar el evento mediante “emit”.
Veamos un ejemplo sencillo de un objeto llamado Auto el cual emite el evento “arrancar”:
var EventEmitter = require("events").EventEmitter; var util = require("util"); //Heredar del objeto EventEmitter util.inherits(Car, EventEmitter); function Car(brand) { EventEmitter.call(this); this._brand = brand; } Car.prototype.start = function() { console.log("Arrancando el auto de marca " + this._brand); var date = new Date(); this.emit("arrancar", date); } var car = new Car("Audi"); car.on("arrancar", function(date) { console.log("El auto arranca en la fecha: " + date.toString()); }); car.start();
Como vemos, es muy sencillo primero “Heredamos” del objeto
EventEmitter, luego disparamos el evento deseado con el método emit, podemos pasar los parámetros que se requieran al suscriptor como argumentos del método emit, en el caso del ejemplo se pasa la fecha de arranque del auto, por último
nos suscribimos al evento con el método on.
Referencias:
https://nodejs.org/api/events.html