Translate

lunes, 4 de mayo de 2015

Crear nuestros propios eventos en Node.js

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