【问题标题】:Rxjs, Pipe with one argumentRxjs,带有一个参数的管道
【发布时间】:2019-06-25 07:21:14
【问题描述】:

使用带有一个参数的 Pipe 函数与完全不使用 Pipe 有什么不同吗?

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

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

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

相对

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

【问题讨论】:

  • 使用管道是Rxjs 6,不使用管道是Rxjs 5,见learnrxjs.io/concepts/rxjs5-6.html,小心,目录变了
  • 使用管道使您的代码可摇树。否则将导致不必要的更大代码库。

标签: angular rxjs rxjs-pipeable-operators


【解决方案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】:

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

    我们曾经通过像这样的静态导入将运算符原型化为 Observables

    import 'rxjs/add/operator/takeUntil';

    但是,这使得摇树RxJS 成为不可能。因此,RxJS 宣布了从RxJS v5.5 开始的可管道操作符。始终在 pipe 中使用您的运算符

    【讨论】:

      【解决方案3】:

      关键是旧方法将运算符添加到原型中,以便每个可观察实例都可以使用它。这就是为什么它使操作员无法摇动,并且不鼓励采用这种方式。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-06-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-10
        • 2019-10-04
        • 1970-01-01
        相关资源
        最近更新 更多