Skip to content

Instantly share code, notes, and snippets.

@janaSunrise
Created September 25, 2022 11:37
Show Gist options
  • Save janaSunrise/d1a03d8d8698643a93a89841de7f18ec to your computer and use it in GitHub Desktop.
Save janaSunrise/d1a03d8d8698643a93a89841de7f18ec to your computer and use it in GitHub Desktop.
Lightweight event emitter for typescript/javascript.
export class EventEmitter {
public events: Map<string, Set<Function>>;
constructor() {
this.events = new Map();
}
public on(event: string, listener: Function) {
if (!this.events.has(event)) this.events.set(event, new Set());
this.events.get(event)?.add(listener);
}
public off(event: string, listener: Function) {
if (!this.events.has(event)) return;
this.events.get(event)?.delete(listener);
}
public emit(event: string, ...args: any[]) {
if (!this.events.has(event)) return;
this.events.get(event)?.forEach(listener => listener(...args));
}
public once(event: string, listener: Function) {
const wrapper = (...args: any[]) => {
listener(...args);
this.off(event, wrapper);
};
this.on(event, wrapper);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment