@justedoit

EventEmmiter, вызвать все обработчики всех событий?

Ребят, всем привет. Есть такой вот EventEmmitor

class EventEmitter {
  constructor(events = {}) {
    this.events = {};
  }

  on(event, listener) {
    if (typeof this.events[event] !== 'object') {
      this.events[event] = [];
    }
    this.events[event].push(listener);
    return () => this.off(event, listener);
  }
  off(event, listener) {
    if (typeof this.events[event] === 'object') {
      const idx = this.events[event].indexOf(listener);
      if (idx > -1) {
        this.events[event].splice(idx, 1);
      }
    }
  }
  emit(event, ...args) {
    if (typeof this.events[event] === 'object') {
      this.events[event].forEach((listener) => listener.apply(this, args));
    }
  }
  once(event, listener) {
    const remove = this.on(event, (...args) => {
      remove();
      listener.apply(this, args);
    });
  }
}


Задача в том чтобы расширить EventEmitter классом BroadcastEventEmitter так, чтобы была возможность вызвать все обработчики всех событий:
Пример вызова: emit("*", [...arg]) - вызвать все обработчики событий, можно передать аргументы.

Помогите, пожалуйста.
  • Вопрос задан
  • 730 просмотров
Решения вопроса 1
@StockholmSyndrome
class BroadcastEventEmitter extends EventEmitter {
    emit(event, ...args) {
        if (event === '*') {
            Object.keys(this.events).forEach((e) => super.emit(e, ...args));
        } else {
            super.emit(event, ...args);
        }
    }
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы