Sobes.tech
Senior

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');

Live Coding: Implement a basic EventEmitter mechanism… - sobes.tech