Sobes.tech
Back to questions
Senior
2

Live Coding: Реализуй базовый механизм EventEmitter с методами subscribe, publish и механизмом отписки

Companies where asked
Type

Answer from AI

sobes.tech 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 () => {
  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) { // Обработка ошибок в коллбэках, чтобы не прерывать рассылку console.error(Error in subscriber callback for event '${eventName}':, e); } } } }

// Пример использования: const emitter = new EventEmitter(); const unsubscribe = emitter.subscribe('message', (data) => { console.log('Получено сообщение:', data); }); emitter.publish('message', 'Привет!'); unsubscribe(); emitter.publish('message', 'Это сообщение не будет обработано');