在Angular RXJ中,我应该使用`pipe'vs`map''



我被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));

使用 pipe的"新"方式称为

lettable操作员可管道的运算符。您使用"补丁运算符"来称呼"旧"方式,即您链接运算符。

从版本5.5开始,我们已经发货了"可管道操作员",可以在rxjs/operators中访问(请注意多元化的"运算符")。与rxjs/add/operator/*中的"补丁"操作员相比,这些方法是一种更好的方法来拉动所需的操作员。

补丁运营商有一些问题。他们还可以确保您的代码中生产的捆绑包较小。还有其他优点,请参阅相当涵盖的文档。

尽管您的两个代码示例在功能上等效,

回答您的其他问题。另外,您应该在可能的情况下通过补丁操作员使用可管道的操作员。


来自文档(完整性

补丁程序链接的问题是:

  1. 任何导入补丁程序操作员的库将为该库的所有消费者增强Observable.prototype,从而创建盲目依赖性。如果图书馆删除了他们的用法,他们在不知不觉中打破了其他所有人。使用管道,您必须将所需的操作员导入到使用它们的每个文件中。
  2. 直接修补在原型上的操作员不是诸如crolup或webpack之类的工具"摇晃"的。可管道的操作员将是直接从模块中引入的功能。
  3. 在应用程序中导入的未使用的运算符无法通过任何形式的构建工具或棉绒规则可靠地检测到。这意味着您可能会导入scan,但停止使用它,并且仍将其添加到输出捆绑包中。使用可管道的操作员,如果您不使用它,那么棉绒规则可以为您拾取。
  4. 功能组成很棒。构建自己的自定义运营商变得更加容易,现在他们可以像RXJ的所有其他操作员一样工作和看起来。您不需要再扩展可观察的或覆盖lift

最新更新