我想我有基本概念,但有一些晦涩难懂
所以总的来说,这就是我使用 Observable
的方式:
observable.subscribe(x => {
})
如果我想过滤数据,我可以使用这个:
import { first, last, map, reduce, find, skipWhile } from 'rxjs/operators';
observable.pipe(
map(x => {return x}),
first()
).subscribe(x => {
})
我也可以这样做:
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/first';
observable.map(x => {return x}).first().subscribe(x => {
})
所以我的问题是:
- 有什么区别?
- 如果没有区别,为什么函数
pipe
存在? - 为什么这些功能需要不同的导入?
原文由 enno.void 发布,翻译遵循 CC BY-SA 4.0 许可协议
“pipeable”(以前的“lettable”)运算符是自 RxJS 5.5 以来使用运算符 的当前和推荐方式。
我强烈建议您阅读 有关可管道操作符的官方文档
主要区别在于,制作自定义运算符更容易,并且在不改变某些全局
Observable
对象的情况下,如果两个不同的方想要创建同名的运算符,则可能会发生冲突。为每个运算符使用单独的
import
语句'rxjs/add/operator/first'
是制作更小的应用程序包的一种方法。通过只导入你需要的操作符而不是整个 RxJS 库,你可以显着减少总包的大小。但是编译器无法知道您是否导入'rxjs/add/operator/first'
因为您在代码中确实需要它,或者您只是在重构代码时忘记将其删除。这是使用管道运算符的优点之一,其中未使用的导入会被自动忽略。