1
0
Fork 0
mirror of https://gitlab.com/mfocko/LeetCode.git synced 2024-09-16 16:36:56 +02:00
LeetCode/js/event-emitter.js
Matej Focko 2351dfd0ee
chore: unwrap one layer
Signed-off-by: Matej Focko <mfocko@redhat.com>
2023-12-12 14:36:00 +01:00

39 lines
846 B
JavaScript

class EventEmitter {
constructor() {
this.mapping = new Map();
}
subscribe(event, cb) {
if (!this.mapping.has(event)) {
this.mapping.set(event, new Array());
}
this.mapping.get(event).push(cb);
return {
unsubscribe: () => {
this.mapping.set(event, this.mapping.get(event).filter(s => s !== cb));
}
};
}
emit(event, args = []) {
if (!this.mapping.has(event)) {
return [];
}
return this.mapping.get(event).map(cb => cb(...args));
}
}
/**
* const emitter = new EventEmitter();
*
* // Subscribe to the onClick event with onClickCallback
* function onClickCallback() { return 99 }
* const sub = emitter.subscribe('onClick', onClickCallback);
*
* emitter.emit('onClick'); // [99]
* sub.unsubscribe(); // undefined
* emitter.emit('onClick'); // []
*/