Rxjs, Труба с одним аргументом - PullRequest
4 голосов
/ 25 июня 2019

Существуют ли различия при использовании функции Pipe с одним аргументом по сравнению с тем, как вообще не используется Pipe?

В настоящее время я реализую стратегию отмены подписки takeUntil с этой статьи .В «официальном решении» из этого SO вопроса оператор takeUntil отправляется через канал.Однако на эта страница takeUntil используется без канала.

Поэтому мне интересно, есть ли какая-либо разница (утечка памяти / производительность и т. Д.) В использовании канала с одним оператором Rx по сравнению с каналом вообще.

private destroy$ = new Subject();
...
this.potatoService.getPotato()
   .pipe(
    takeUntil(this.destroy$)
   ).subscribe(...

в отличие от

this.potatoService.getPotato()
    .takeUntil(this.destroy$)
    .subscribe(...

Ответы [ 3 ]

1 голос
/ 25 июня 2019

Начиная с RxJS v6, takeUntil (и другие) стали конвейерными операторами, а не автономной функцией.

В ссылке, которой вы поделились, посмотрите раздел импорта, что означает, что в этом примере используется прежняя версия RxJS:

import 'rxjs/add/operator/takeUntil';

Из официальных документов RxJS v6 путь импорта takeUntil становится:

import { takeUntil } from 'rxjs/operators';

Для дальнейшего чтения: https://rxjs -dev.firebaseapp.com / api / operator / takeUntil

1 голос
/ 25 июня 2019

Разницы нет.Последний - старый способ использования операторов в RxJS.Однако, насколько я знаю, это устарело, и вы не должны его использовать.

Мы использовали для прототипирования операторов в Observable s со статическим импортом, подобным этому

import 'rxjs/add/operator/takeUntil';

Однако, это делает невозможным сотрясение дерева RxJS.Таким образом, RxJS объявил о конвейерных операторах, начиная с RxJS v5.5.Всегда используйте своих операторов в пределах pipe

0 голосов
/ 28 июня 2019

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

...