class EventBus {
#listeners = new Map();
on(event, fn) {
if (!this.#listeners.has(event)) this.#listeners.set(event, new Set());
this.#listeners.get(event).add(fn);
return () => this.#listeners.get(event).delete(fn);
}
emit(event, payload) {
this.#listeners.get(event)?.forEach(fn => fn(payload));
}
}
const bus = new EventBus();
const log = [];
const unsub = bus.on('data', v => log.push(`A:${v}`));
bus.on('data', v => log.push(`B:${v}`));
bus.emit('data', 1);
unsub();
bus.on('data', v => log.push(`C:${v}`));
bus.emit('data', 2);
console.log(log.join(',')); Post #3447
2.26K
CHALLENGE
- ❤ 2
- 👍 1