我在谷歌上搜索了这个问题,希望在我问这个问题之前,已经有无数好奇的人了。由于某些原因,大多数点击是在扫描和减少(这一点我很清楚)。所以我有可能完全误解了医生的意思。
根据这些文档,扫描(.)将抓取发出的值,对其进行处理,然后,可以选择地将其传递给下一个排队的人。同时,订阅(.)虽然接受用于处理错误和完成的参数,但也做了同样的事情。
我理解它们之间的“区别”,但在我看来,从开发工具的角度来看,这是微不足道的。对于后者需要普通编码的情况,前者是否只是一种方便的方法呢?或者它们之间是否有根本的区别(比如:我可以通过扫描来做一些我无法实现订阅的事情)?
发布于 2019-03-25 06:42:09
RxJS中的扫描()和订阅()是完全不同的概念。
scan 是一个操作符,用于将流中的值与流中的先前值组合起来,然后输出它们的一些组合(我认为扫描和约简是唯一这样做的操作符)。订阅只在流中的当前值上工作。
订阅是一种特殊的方法,也是RxJS中最重要的概念之一。订阅出现在可观察流的末尾,这是您可以将结果值用于某些内容的地方。从所有其他操作符中,您返回一些可以传递到链上的内容,但是您不会从订阅返回。
如果您使用的是冷可观测(通常是这样的),那么您需要订阅它才能运行代码。如果在可观察的冷流上没有订阅,那么可观察流中的任何代码都不会运行。
使用它们的语法也不同。扫描是您在管道()方法中链接的操作符,如map、reduce、filter、tap、mergeMap、flatMap等。它看起来如下:
myObservable$.pipe(map(...), scan(...), flatMap(...));订阅是一种类似管道的方法,您可以点链,比如:
myObservable$.pipe(...).subscribe(...);https://stackoverflow.com/questions/55331848
复制相似问题