关于angular:什么是rxJS中的管道

What is pipe for in rxJS

我想我有基本概念,但有些模糊之处

所以一般来说,这就是我如何使用一个可观测的:

1
2
3
observable.subscribe(x => {

})

如果我想过滤数据,我可以使用:

1
2
3
4
5
6
7
import { first, last, map, reduce, find, skipWhile } from 'rxjs/operators';
observable.pipe(
    map(x => {return x}),
    first()
    ).subscribe(x => {

})

我也可以这样做:

1
2
3
4
5
6
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/first';

observable.map(x => {return x}).first().subscribe(x => {

})

所以我的问题是:

  • 有什么区别?
  • 如果没有区别,为什么存在函数管道?
  • 为什么这些函数需要不同的导入?

  • "pipable"(以前的"lettable")运算符是自RXJS 5.5以来使用运算符的当前和推荐方法。

    我强烈建议您阅读官方文档https://github.com/reactivex/rxjs/blob/master/doc/pipeable-operators.md

    主要的区别在于,在不改变某些全局Observable对象的情况下,可以更容易地创建自定义运算符,并且更好地实现三重可访问性,如果两个不同的方想要创建相同名称的运算符,则可能会发生冲突。

    为每个操作员使用单独的import语句'rxjs/add/operator/first'是一种制作较小应用程序包的方法。通过只导入您需要的操作符而不是整个RXJS库,您可以显著地减少包的总大小。但是,编译器不知道您是否导入了'rxjs/add/operator/first',因为您在代码中确实需要它,或者在重构代码时忘记删除它。这是使用pipable操作符的优点之一,其中未使用的导入将被自动忽略。