Back to questions
Аэрофлот
Middle+
4
Если нужно поддерживать дублирующиеся обработчики, как бы вы реализовали отписку? Какие минусы у реализации через массив с фильтрацией?
Companies where asked
Answer from AI
sobes.tech AI
Если нужно поддерживать дублирующиеся обработчики и реализовать отписку, можно хранить обработчики в массиве (списке) и при отписке удалять нужный обработчик.
Минусы реализации через массив с фильтрацией:
- Производительность: При удалении обработчика приходится создавать новый массив без этого обработчика (фильтрация), что может быть дорого при большом количестве обработчиков.
- Проблемы с дубликатами: Если обработчики дублируются, удаление по значению может удалить все совпадения, а не только конкретный экземпляр.
- Сложность идентификации: Без уникальных идентификаторов сложно точно удалить нужный обработчик.
Как улучшить:
- Использовать структуру данных, которая хранит обработчики с уникальными ID (например, Map или объект с ключами).
- При добавлении возвращать токен или функцию отписки, которая удалит именно этот обработчик.
Пример на JavaScript:
class EventEmitter {
constructor() {
this.handlers = new Map();
this.nextId = 0;
}
on(handler) {
const id = this.nextId++;
this.handlers.set(id, handler);
return () => this.handlers.delete(id); // функция отписки
}
emit(event) {
for (const handler of this.handlers.values()) {
handler(event);
}
}
}
Такой подход позволяет точно и эффективно отписываться от конкретных обработчиков, даже если они дублируются.