Hard
Fixing Memory Leaks in Asynchronous Event Emitter Implementation with Proper Cleanup
What's wrong with this event handling implementation?
1class EventEmitter {2 constructor() {3 this.events = new Map();4 }56 on(event, callback) {7 if (!this.events.has(event)) {8 this.events.set(event, []);9 }10 this.events.get(event).push(callback);11 }1213 emit(event, data) {14 const callbacks = this.events.get(event) || [];15 callbacks.forEach(callback => {16 setTimeout(() => callback(data), 0);17 });18 }1920 off(event, callback) {21 if (!this.events.has(event)) return;22 const callbacks = this.events.get(event);23 const index = callbacks.indexOf(callback);24 if (index !== -1) {25 callbacks.splice(index, 1);26 }27 }28}2930const emitter = new EventEmitter();31const handler = data => console.log(data);3233emitter.on('test', handler);34emitter.emit('test', 'hello');35emitter.off('test', handler);36emitter.emit('test', 'world');