Код 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
- Map<событие, Set<колбэк>> - Set сразу даёт уникальность и удаление за O(1).
- once - это обёртка, которая снимает саму себя перед вызовом.
- Во время emit подписчик может отписаться - обходи копию коллекции.
Решите в тренажёре
Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.