Skip to content

Instantly share code, notes, and snippets.

@matthewglover
Created April 14, 2015 09:18
Show Gist options
  • Save matthewglover/b8eecef86bb30169f1a7 to your computer and use it in GitHub Desktop.
Save matthewglover/b8eecef86bb30169f1a7 to your computer and use it in GitHub Desktop.
//ES 6 code
// const RX = require('rx')
class EventEmitter {
constructor() {
this.__events = {};
}
on(eventName, handler) {
const list = this._eventList(eventName);
this._addListener(list, handler);
}
emit(eventName, ...args) {
this._eventList(eventName).forEach(fn => fn(...args))
}
_eventList(eventName) {
if (!this.__events[eventName]) this.__events[eventName] = [];
return this.__events[eventName];
}
_addListener(list, handler) {
list.push(handler);
}
}
const emitter = new EventEmitter();
const source = Rx.Observable.fromEventPattern(
v => emitter.on('testEmit', v)
);
source.subscribe(v => console.log(`Subscriber 1 -> ${v}`));
[10, 20, 30, 40, 50].forEach(v => emitter.emit('testEmit', v));
window.setTimeout(() => source.subscribe(v => console.log(`Subscriber 2 -> ${v}`)), 1000);
window.setTimeout(() => emitter.emit('testEmit', 60), 1500);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment