Код Middle Архитектура и новая архитектура обновлено
Подписки на события: эмиттер с remove()
Условие
Нативные модули отдают события через эмиттер: addListener возвращает подписку с методом remove(). Реализуйте упрощённую версию для проверки логики.
Функция runEmitter(ops) получает список операций и возвращает массив строк, которые «получили» слушатели:
["add", name, event]: подписать слушателяnameна событиеevent(подписки получают номера по порядку с 0);["remove", subIndex]: снять подписку с этим номером (повторное снятие ничего не делает);["emit", event, payload]: каждый активный слушатель события в порядке подписки записывает"<name>:<payload>".
Один и тот же слушатель может быть подписан дважды, тогда получит событие дважды.
Примеры
runEmitter([["add", "a", "battery"], ["emit", "battery", 50]]) // ["a:50"]
runEmitter([["add", "a", "battery"], ["add", "b", "battery"], ["emit", "battery", 40]]) // ["a:40", "b:40"]
runEmitter([["add", "a", "battery"], ["add", "b", "net"], ["emit", "net", "wifi"]]) // ["b:wifi"]
Как подойти
Подсказки: 2
- Храните каждую подписку отдельным объектом с флагом активности.
- Снятие по номеру подписки, а не по имени слушателя.
Решите в тренажёре
Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.