Шаблон подписки наблюдателя в блоге

#javascript

#javascript

Вопрос:

Я читал этот блог https://blog.lftechnology.com/implementing-the-observer-pattern-in-javascript-198ccb62124d и не смог понять следующий фрагмент кода: return Заявление здесь:

 return () =>
      (this.subscribers = this.subscribers.filter(
        subscriber => subscriber !== fn
      )); 
  

внутри этого фрагмента кода:

 subscribe(fn) {
    if (Array.isArray(fn)) {
      return this.subscribeMany(fn);
    }

    this.subscribers.push(fn);

    return () =>
      (this.subscribers = this.subscribers.filter(
        subscriber => subscriber !== fn
      ));
  }
  

Следует ли это вообще удалить, а не subscriber => subscriber !== fn как указано? Они просто вставили значение fn в this.subscribers в предыдущей строке, а затем немедленно удалили его? это не имеет смысла.

Комментарии:

1. Функция, которая удаляет fn , возвращается, а не вызывается.

2. Да, это правильно! Однако, не странно ли возвращать анонимную функцию, которая отфильтровывает подписчиков после подписки? похоже, что это функция отмены подписки, и в этом случае это было бы так: return { unsubscribe() => (this.subscribers = this.subscribers.filter( subscriber => subscriber !== fn )) };

3. похоже, что этот возврат используется только для включения цепочки? @Ry- и не служит никакой полезной цели

4. Это функция отмены подписки, и нет особой причины, по которой это было бы так по сравнению как это уже написано. Нет ничего для цепочки, и если вы просто имеете в виду немедленный вызов чего-либо в результате, вы бы никогда этого не сделали (немедленно вызвать .unsubscribe() возвращаемое значение .subscribe() ).

Ответ №1:

Подписка на наблюдаемый возвращает Subscription объект, у которого есть unsubscribe() метод, который не принимает аргументов и просто удаляет ресурс, удерживаемый подпиской.