Skip to content

Instantly share code, notes, and snippets.

@an-parubets
Last active March 14, 2023 19:03
Show Gist options
  • Save an-parubets/16e034e1615dc405d0e4bc1336e3f3e6 to your computer and use it in GitHub Desktop.
Save an-parubets/16e034e1615dc405d0e4bc1336e3f3e6 to your computer and use it in GitHub Desktop.
EventEmitter
class EventEmitter {
constructor() {
this.events = {};
}
/**
* @param {string} eventName
* @param {Function} callback
*/
subscribe(eventName, callback) {
!this.events[eventName] && (this.events[eventName] = []);
this.events[eventName].push(callback);
}
/**
* @param {string} eventName
* @param {Function} callback
*/
unsubscribe(eventName, callback) {
this.events[eventName] = this.events[eventName].filter(eventCallback => callback !== eventCallback);
}
/**
* @param {string} eventName
* @param {any} args
*/
emit(eventName, args) {
const event = this.events[eventName];
event && event.forEach(callback => callback.call(null, args));
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment