Middle+
Wenn Sie doppelte Handler verwalten müssen, wie würden Sie die Abmeldung implementieren? Welche Nachteile hat die Implementierung über ein Array mit Filterung?
sobes.tech KI
Antwort von 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);
}
}
}
Такой подход позволяет точно и эффективно отписываться от конкретных обработчиков, даже если они дублируются.