Rxjs,带有一个参数的管道

时间:2019-06-25 07:21:14

标签: angular rxjs rxjs-pipeable-operators

使用带有一个参数的Pipe函数与根本不使用Pipe相比有什么区别吗?

我目前正在实施this article中的takeUntil取消订阅策略。在this SO question的“官方解决方案”中,takeUntil运算符通过管道发送。但是,在this page上,takeUntil不使用任何管道。

因此,我想知道使用带有单个Rx运算符的管道与根本没有管道的管道是否有任何区别(内存泄漏/性能等)。

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

相对于

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

3 个答案:

答案 0 :(得分:1)

没有区别。后者是在RxJS中使用运算符的旧方法。但是,据我所知,它已被弃用,您不应使用它。

我们曾经使用静态导入将操作符原型化为Observable

import 'rxjs/add/operator/takeUntil';

但是,这使得无法摇晃RxJS。因此,RxJS宣布了从RxJS v5.5开始的可管道运算符。始终在pipe

中使用您的运算符

答案 1 :(得分:1)

自RxJS v6起,takeUntil(及其他)已成为可管道运算符,而不是独立的函数。

在您共享的链接中,请查看“导入”部分,这意味着该示例使用的是RxJS的早期版本:

import 'rxjs/add/operator/takeUntil';

根据RxJS v6的官方文档,takeUntil的导入路径为:

import { takeUntil } from 'rxjs/operators';

进一步阅读:https://rxjs-dev.firebaseapp.com/api/operators/takeUntil

答案 2 :(得分:0)

重点是,旧方法将运算符添加到原型,以便每个可观察的实例都可以使用它。这就是为什么它会使操作员变得不可动摇,并且不鼓励这样做。