Какие операторы RxJS требуют отмены подписки?

#javascript #typescript #rxjs

#javascript #typescript #rxjs

Вопрос:

Я знаю, что есть операторы, которые завершатся автоматически, такие как forkJoin, но есть и другие, которые, насколько я понимаю, никогда не завершаются и должны быть отменены для предотвращения любых утечек подписки, таких как combineLatest.

Есть ли хороший способ определить, от каких из них следует отказаться, а какие безопасны? Или, по крайней мере, их полный список? Я изо всех сил пытаюсь получить эту информацию из документации.

Я все еще довольно новичок в RxJS, поэтому дайте мне знать, если я, кажется, что-то недопонимаю.


Просто в качестве примечания: Я знаю об использовании | async , но я работаю над существующим проектом, и на данный момент это не вариант. Я также знаю и использую takeUntil вместо unsubscribe метода, так что это не относится к этому. Я просто хочу знать, когда мне нужно использовать takeUntil / unsubscribe после использования одного из операторов RxJS.

Ответ №1:

forkJoin на самом деле автоматически не завершается. Это зависит от наблюдаемых, которые он модифицирует для завершения. Если эти наблюдаемые не завершаются, не завершается и тот, который возвращается forkJoin() . На самом деле, combineLatest обладает аналогичными качествами.

В общем, все операторы, предоставляемые RxJS, создают наблюдаемые объекты, которые закрываются, когда исходные наблюдаемые объекты закрываются — или, по крайней мере, один из них.

На практике это означает, что разработчик, использующий RxJS, должен понимать поведение наблюдаемых, которые они передают оператору. Может ли поток потенциально застрять открытым навсегда? В этом случае мы захотим изменить его, чтобы справиться с этим — возможно, он закроется после 5 секунд отсутствия активности.

Суть в том, что операторы либо будут уважать завершение наблюдаемого ввода, либо они изменят его (вероятно, завершив его раньше), потому что это то, для чего они предназначены. Наиболее распространенные примеры последнего типа включают «принимает»: take , takeWhile , takeUntil .

Проведите достаточно времени с библиотекой — прочитайте документы для каждого оператора, поиграйте с ними в коде или спросите здесь, если что-то конкретное не имеет смысла, и вы будете хорошо знакомы с тем, что есть что.