Skip to content

Instantly share code, notes, and snippets.

@priort
Created January 2, 2021 17:52
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save priort/3ff2e7d243070e3507ff2ad56c1ace00 to your computer and use it in GitHub Desktop.
Save priort/3ff2e7d243070e3507ff2ad56c1ace00 to your computer and use it in GitHub Desktop.
let eventDispatcher = function() {
let replaying = false;
let events = [];
let subscribers = {};
let dispatchEvent = (ev) => {
if (!replaying) {
events.push(ev);
}
for (const sub of subscribers[ev.name]) {
sub(ev);
}
}
let subscribe = (eventName, f) => {
if(subscribers[eventName]) {
subscribers[eventName].push(f);
} else {
subscribers[eventName] = [f];
}
}
let replay = () => {
replaying = true;
let i = 1
for (const ev of events) {
setTimeout(() => dispatchEvent(ev), 1000 * i);
i++;
}
setTimeout(() => replaying = false, 1000 * events.length)
}
return {
dispatch: dispatchEvent,
subscribe: subscribe,
replay: replay
}
}();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment