Код Middle Реализация с нуля обновлено

EventEmitter

Условие

Реализуй on(event, cb), off(event, cb), once(event, cb), emit(event, ...args). on возвращает функцию отписки.

Что проверяют тесты

  • on/emit

  • несколько подписчиков

  • off отписывает

  • on возвращает отписку

  • once только раз

  • отписка во время emit не ломает обход

Как подойти

Map события → Set колбэков. on возвращает замыкание-отписку - это ждут почти всегда. once реализуется через обёртку, снимающую себя. Ключевая тонкость: обходить [...set], иначе мутация во время итерации потеряет подписчика.

Подсказки: 3
  1. Map<событие, Set<колбэк>> - Set сразу даёт уникальность и удаление за O(1).
  2. once - это обёртка, которая снимает саму себя перед вызовом.
  3. Во время emit подписчик может отписаться - обходи копию коллекции.

Решите в тренажёре

Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.