Шина событий с шаблонами
Условие
createBus(): on(pattern, fn), emit(event, payload). Шаблон поддерживает '' как один сегмент и '**' как хвост: 'user:' ловит 'user:login', 'user:**' ловит и 'user:a:b'. Разделитель - двоеточие.
Что проверяют тесты
точное совпадение
звёздочка - один сегмент
двойная звёздочка - хвост
имя события передаётся
отписка
emit возвращает число сработавших
отписка во время рассылки не ломает обход
Как подойти
Шаблоны превращают шину из плоского списка имён в иерархию: можно слушать всё, что происходит с пользователем, не перечисляя события. Посегментное сравнение проще и быстрее, чем сборка регулярки. Обход по копии - та же защита, что и в обычном EventEmitter: подписчик вправе отписаться прямо в обработчике.
Подсказки: 3
- Сравнивай шаблон и событие посегментно.
- '**' завершает проверку успехом, '*' совпадает с любым одним сегментом.
- Обходи копию списка подписчиков.
Решите в тренажёре
Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.