Sobes.tech
Middle+

Агар бояд дуборакунандагони барномасозиро дастгирӣ кардан лозим бошад, чӣ гуна ба қайдгирӣ иҷро мекунед? Кадом нуқсонҳо дар иҷрои тавассути массив бо филтркунӣ ҳастанд?

sobes.tech AI

Ҷавоб аз 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);
    }
  }
}

Такой подход позволяет точно и эффективно отписываться от конкретных обработчиков, даже если они дублируются.