Код Middle Асинхронные паттерны спрашивают часто обновлено
Свой EventEmitter: on, off, once, emit
Условие
Реализуй класс Emitter в духе node:events:
on(event, fn)подписывает, возвращаетthis;once(event, fn)подписывает на одно срабатывание;off(event, fn)отписывает (в том числе подписку черезonceпо исходной функции);emit(event, ...args)синхронно вызывает слушателей в порядке подписки, возвращаетtrue, если слушатели были;listenerCount(event).
Как в Node: emit('error', err) без слушателей error бросает err. Отписка во время emit не должна ломать текущий обход.
Что проверяют тесты
on и emit с аргументами
emit без слушателей возвращает false
порядок подписки и чейнинг
once срабатывает один раз
off по исходной функции once
отписка во время emit не ломает обход
error без слушателя бросает
error со слушателем не бросает
listenerCount
Как подойти
Подсказки: 3
- Храни слушателей в
Map<event, массив>. - Для
onceхрани обёртку и исходную функцию, чтобыoff(fn)нашёл подписку. - В
emitобходи копию массива.
Решите в тренажёре
Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.
Предыдущий вопрос
Расписание экспоненциального backoff
Следующий вопрос
mapLimit: параллельная обработка с ограничением