在Angular rxjs中何时应该使用`pipe` vs`map`

Mon*_*key 50 rxjs angular

pipe操作员与链接相比,我有点困惑map.以下两个例子在功能上是否相同?管道功能的目的或优点是什么?

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));
Run Code Online (Sandbox Code Playgroud)

Igo*_*gor 53

使用"新"方式pipe被称为可口操作员 可管式操作员.使用"补丁运算符"调用链接运算符的"旧"方式.

从版本5.5开始,我们已经发布了"可管道运算符",可以访问它rxjs/operators(注意复数"运算符").这些都是一种更好的方法,可以提供您需要的运算符,而不是"补丁"运算符rxjs/add/operator/*.

补丁运营商存在一些问题.他们还可以确保您的代码中生成的包更小.还有其他优点,请参阅相当好的文档.

尽管您的2个代码示例在功能上是等效的,但要回答您的其他问题.此外,您应尽可能使用可管理操作符而不是修补程序操作符.


文档(完整性)

针对点链的修补运算符的问题是:

  1. 任何导入补丁操作符的库都会扩充该Observable.prototype库的所有使用者,从而创建盲目依赖.如果图书馆删除了他们的使用,他们会在不知不觉中打破其他人.使用pipeables,您必须将所需的运算符导入到您使用它们的每个文件中.
  2. 直接打印到原型上的操作员不会像汇总或webpack这样的工具"树木震动".可管理的操作员将只是直接从模块中提取的功能.
  3. 通过任何类型的构建工具或lint规则都无法可靠地检测到在应用程序中导入的未使用的运算符.这意味着你可以导入scan,但是停止使用它,它仍然被添加到你的输出包中.对于可管理的操作员,如果您不使用它,一个lint规则可以为您选择它.
  4. 功能性成分非常棒.构建自己的自定义运算符变得更加容易,现在它们的工作方式与rxjs中的所有其他运算符一样.您不再需要扩展Observable或覆盖lift.

  • 它被称为[可管道操作符](https://github.com/ReactiveX/rxjs/blob/master/doc/lettable-operators.md)。 (2认同)