rxjs中scan(...)和subscribe(...)之间的区别

时间:2019-03-25 05:45:22

标签: rxjs

我已经搜索过这个问题,希望在我问之前也有一大批好奇的人。由于某些原因,大多数点击都处于扫描或减少状态(我清楚地知道)。因此,有可能我完全误解了文档。

根据文档,scan(...)将抢夺一个发出的值,对其进行填充,然后,有选择地将其传递给下一个排队的人。同时,subscribe(...)尽管接受用于处理错误和完成的参数,但功能却完全相同。

我理解它们之间的“差异”,但对我而言,从开发工具的角度看,它似乎微不足道。就象前者只是一种需要平凡编码的情况下的便捷方法那样简单吗?还是它们之间有根本性的区别(例如:我可以完成无法完成订阅的扫描操作)?

1 个答案:

答案 0 :(得分:1)

Scan()和Subscribe()在RxJS中是完全不同的概念。

扫描是一种运算符,用于将流中的值与流中的先前值进行组合,然后输出它们的某些组合(我认为scan和reduce是唯一执行此操作的运算符)。订阅仅适用于流中的当前值。

订阅是一种特殊的方法,是RxJS中最重要的概念之一。订阅位于Observable流的末尾,在这里您可以使用结果值。从所有其他运算符返回的内容可以沿链传递,但不从订阅返回。

如果您使用的是冷的Observable(经常使用),则需要订阅它才能完全运行代码。如果您没有订阅可观察的可观测对象,那么可观测流中的任何代码都将不会运行。

使用它们的语法也不同。扫描是一种操作符,可将其链接到pipe()方法内,例如map,reduce,filter,tap,mergeMap,flatMap等。 :

myObservable$.pipe(map(...), scan(...), flatMap(...));

订阅是点链的管道之类的方法,例如:

myObservable$.pipe(...).subscribe(...);