RxJS withLatestFrom是一种实例方法。必须新建/创建Observable的实例才能调用该方法。
merge方法是一种静态方法。不需要实例。
为什么RxJS withLatestFrom
不是静态方法而是实例方法?
答案 0 :(得分:3)
我认为一个很好的例子是作为static和instance方法存在的combineLatest
运算符。来自combineLatest
的源Observable的顺序无关紧要。它的内部结构以相同的方式工作,输出将是相同的(只是结果数组中的值的顺序将是不同的,这是无关紧要的)。这同样适用于concat
,merge
,zip
,forkJoin
等。
然而,对于withLatestFrom
运算符,它是不同的,并且Observable的顺序很重要。有一个源Observable可以控制操作员何时发出。如果您更改了订单,则会产生不同的结果。例如,如果您有以下内容:
Observable.withLatestFrom(o1, o2, o3)
这意味着您还可以使用以下内容:
Observable.withLatestFrom(...observables)
现在您无法知道哪个Observable是源,并且很难调试正在发生的事情。
所以没有Observable.withLatestFrom
静态方法的原因是因为它没有多大意义。 Observables的顺序很重要,它会让事情变得更加模糊。
出于同样的原因,即使没有技术限制,buffer
或window
等其他运营商也没有静态表格。它只是允许你编写更多命令式代码而不是简单地链接运算符。
答案 1 :(得分:2)
withLatestFrom
与merge
不同,因为它具有规范“源”可观察的概念,可以通过另一个可观察的最新值进行扩充。 merge
不像这样“层次化”,可观察量只是等于组合成一个流。