#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()
метод, который не принимает аргументов и просто удаляет ресурс, удерживаемый подпиской.