bassoon
Version:
a simplified and optimized fork of oboejs
37 lines (36 loc) • 934 B
JavaScript
export default function Emitter() {
return {
_events: {},
_get(key) {
if (!this._events[key]) {
this._events[key] = { callback: null, queue: [] };
}
return this._events[key];
},
on(key, callback) {
const event = this._get(key);
const queue = event.queue;
event.callback = callback;
if (callback && queue.length) {
// emit missed events
for (let i = 0; i < queue.length; ++i) {
callback.call(this, queue[i]);
}
event.queue = [];
}
return this;
},
emit(key, data) {
const event = this._get(key);
const callback = event.callback;
if (callback) {
// emit current event
callback.call(this, data);
} else {
// save events so that they don't get dropped
event.queue.push(data);
}
return this;
},
};
}