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个代码示例在功能上是等效的,但要回答您的其他问题.此外,您应尽可能使用可管理操作符而不是修补程序操作符.
从文档(完整性)
针对点链的修补运算符的问题是:
- 任何导入补丁操作符的库都会扩充该
Observable.prototype库的所有使用者,从而创建盲目依赖.如果图书馆删除了他们的使用,他们会在不知不觉中打破其他人.使用pipeables,您必须将所需的运算符导入到您使用它们的每个文件中.- 直接打印到原型上的操作员不会像汇总或webpack这样的工具"树木震动".可管理的操作员将只是直接从模块中提取的功能.
- 通过任何类型的构建工具或lint规则都无法可靠地检测到在应用程序中导入的未使用的运算符.这意味着你可以导入
scan,但是停止使用它,它仍然被添加到你的输出包中.对于可管理的操作员,如果您不使用它,一个lint规则可以为您选择它.- 功能性成分非常棒.构建自己的自定义运算符变得更加容易,现在它们的工作方式与rxjs中的所有其他运算符一样.您不再需要扩展Observable或覆盖
lift.
| 归档时间: |
|
| 查看次数: |
25645 次 |
| 最近记录: |