当前位置: 首页 > 知识库问答 >
问题:

在Angular rxjs中,什么时候应该使用'pipe'vs'map'

司空奕
2023-03-14

我对管道运算符和只是链接映射有点困惑。下面的两个例子在功能上是等同的吗?管道功能的目的或优势是什么?

const name = ajax
  .getJSON<{ name: string }>("/api/employees/alice")
  .pipe(
    retry(3, 1000),
    map(employee => employee.name),
    catchError(error => of(null))
  );
const name = ajax
  .getJSON<{ name: string }>("/api/employees/alice")
  .let(retry(3, 1000))
  .map(employee => employee.name)
  .catch(error => Rx.Observable.of(null));

共有1个答案

杨飞飙
2023-03-14

使用管道的“新”方式称为 lettable操作符 Pipeable操作符。“旧的”方式,即链式操作符,被称为使用“补丁操作符”。

从版本5.5开始,我们提供了“pipeable operators”,它可以在rxjs/operators中访问(注意复数的“operators”)。与rxjs/add/operator/*中的“补丁”运算符相比,这是一种更好的提取所需运算符的方法。

补丁操作符有一些问题。它们还可以确保从代码中生成的包更小。还有其他优点,请参阅文档,其中相当好地涵盖了它。

点链接的补丁运算符的问题是:

  1. 任何导入补丁运算符的库都将为该库的所有使用者增加observable.prototype,从而创建盲依赖关系。如果库删除了它们的用法,它们就会在不知不觉中破坏所有其他人。对于pipeables,您必须将所需的运算符导入到使用它们的每个文件中。
  2. 直接修补到原型上的操作符不会被rollup或webpack之类的工具“摇摇欲坠”。Pipeable运算符将是,因为它们只是直接从模块中拉入的函数。
  3. 应用程序中导入的未使用操作符无法通过任何类型的构建工具或lint规则可靠地检测到。这意味着您可以导入scan,但是停止使用它,并且它仍然被添加到您的输出包中。对于pipeable操作符,如果您没有使用它,则lint规则可以为您拾取它。
  4. 功能组合真棒。构建您自己的自定义运算符变得容易得多,现在它们的工作和外观就像RXJS中的所有其他运算符一样。您不再需要扩展Observable或重写Lift
 类似资料:
  • 问题内容: 我知道他们两个都禁用了Nagle的算法。 我什么时候应该/不应该使用它们中的每一个? 问题答案: 首先,不是所有人都禁用Nagle的算法。 Nagle的算法用于减少有线中更多的小型网络数据包。该算法是:如果数据小于限制(通常是MSS),请等待直到收到先前发送的数据包的ACK,同时累积用户的数据。然后发送累积的数据。 这将对telnet等应用程序有所帮​​助。但是,在发送流数据时,等待A

  • 问题内容: 在该类中,有两个字符串,和。 有什么不同?我什么时候应该使用另一个? 问题答案: 如果你的意思是和则: 用于在文件路径列表中分隔各个文件路径。考虑在上的环境变量。您使用a分隔文件路径,因此在上将是;。 是或用于拆分到特定文件的路径。例如在上,或

  • 问题内容: 在集成我以前从未使用过的Django应用程序时,我发现了用于定义类中函数的两种不同方式。作者似乎非常有意地使用了它们。第一个是我自己经常使用的: 另一个是我不使用的,主要是因为我不知道何时使用它,以及什么用途: 在Python文档中,装饰器的解释如下: 类方法将类作为隐式第一个参数接收,就像实例方法接收实例一样。 所以我想指的是自己(而不是实例)。我不完全理解为什么会这样,因为我总是可

  • 问题内容: 在工作中进行大量重构的中间,我希望引入stdClass *作为从函数返回数据的一种方式,并且我试图找到非主观论据来支持我的决定。 是否有任何情况下最好使用一种而不是另一种? 使用stdClass而不是数组有什么好处? 有人会说,函数必须尽可能少且特定,才能返回一个值。 我决定使用stdClass是暂时的,因为从长远来看,我希望为每个进程找到正确的Value Objects。 问题答案:

  • 问题内容: 我已经用python编程了大约两年了。主要是数据资料(熊猫,mpl,numpy),还有自动化脚本和小型Web应用程序。我试图成为一个更好的程序员,并增加我的python知识,而困扰我的一件事是我从未使用过一个类(除了为小型Web应用程序复制随机烧瓶代码外)。我通常理解它们是什么,但是我似乎无法为为什么在一个简单的函数中需要它们的问题而wrap之以鼻。 为了使我的问题更具针对性:我编写了

  • 问题内容: 我看过各种文章,但我仍然不知道为什么不应该使用它。请让我知道您的想法。 问题答案: 我发现有必要在错误的设计中使用instanceof提示。可以肯定的是,将会出现一个大型,复杂的开关风格的构造。在我看到的其他大多数情况下,我们应该使用多态而不是instanceof。请参阅策略模式。(相关的使用示例) 我唯一需要使用的是实现时。