Skip to content

Instantly share code, notes, and snippets.

@ajchambeaud
Created May 1, 2017 22:47
Show Gist options
  • Save ajchambeaud/1cf93a7d06e6959203e19f01496d263d to your computer and use it in GitHub Desktop.
Save ajchambeaud/1cf93a7d06e6959203e19f01496d263d to your computer and use it in GitHub Desktop.
// Implementacion simple de un EventEmitter en node.js
class Emitter {
constructor() {
this.subscriptors = {};
}
emit(event, data) {
this.subscriptors[event] && this.subscriptors[event].forEach(subscritor => subscritor(data));
}
on(event, subscriptor) {
if (!this.subscriptors[event]) {
this.subscriptors[event] = [];
}
this.subscriptors[event].push(subscriptor);
}
}
// Uso de la clase Emmitter
const emiter = new Emitter();
// Creo una funcion async simple cualquier tipo
const getUsersFromDB = () => {
const users = ['Juan', 'Maria', 'Pablo'];
return Promise.resolve(users);
};
// Llamo a la funcion async y cuando obtengo un resultado, emito el evento "result"
getUsersFromDB().then(users => emiter.emit('result', users));
// A partir de ahora puedo registrar cualquier cantidad de subscriptores para el evento "result"
emiter.on('result', users => {
console.log('subscriptor 1');
console.log(users);
});
emiter.on('result', users => {
console.log('subscriptor 2');
console.log(users);
});
emiter.on('result', users => {
console.log('subscriptor 3');
console.log(users);
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment