Live Coding: Implement a basic EventEmitter mechanism with subscribe, publish methods, and an unsubscription mechanism.
sobes.tech AI
Answer from AI
javascript class EventEmitter { constructor() { this.events = new Map(); }
subscribe(eventName, callback) { if (!this.events.has(eventName)) { this.events.set(eventName, new Set()); } const subscribers = this.events.get(eventName); subscribers.add(callback);
// Return unsubscribe function
return () => {
subscribers.delete(callback);
if (subscribers.size === 0) {
this.events.delete(eventName);
}
};
}
publish(eventName, data) {
if (!this.events.has(eventName)) return;
for (const callback of this.events.get(eventName)) {
try {
callback(data);
} catch (e) {
// Error handling in callbacks to prevent interruption of dispatch
console.error(Error in subscriber callback for event '${eventName}':, e);
}
}
}
}
// Example usage: const emitter = new EventEmitter(); const unsubscribe = emitter.subscribe('message', (data) => { console.log('Received message:', data); }); emitter.publish('message', 'Hello!'); unsubscribe(); emitter.publish('message', 'This message will not be handled');