为什么withLatestFrom RxJS方法不是静态的?

时间:2017-04-17 03:14:09

标签: rxjs reactive-programming rxjs5

RxJS withLatestFrom是一种实例方法。必须新建/创建Observable的实例才能调用该方法。

merge方法是一种静态方法。不需要实例。

为什么RxJS withLatestFrom不是静态方法而是实例方法?

2 个答案:

答案 0 :(得分:3)

我认为一个很好的例子是作为static和instance方法存在的combineLatest运算符。来自combineLatest的源Observable的顺序无关紧要。它的内部结构以相同的方式工作,输出将是相同的(只是结果数组中的值的顺序将是不同的,这是无关紧要的)。这同样适用于concatmergezipforkJoin等。

然而,对于withLatestFrom运算符,它是不同的,并且Observable的顺序很重要。有一个源Observable可以控制操作员何时发出。如果您更改了订单,则会产生不同的结果。例如,如果您有以下内容:

Observable.withLatestFrom(o1, o2, o3)

这意味着您还可以使用以下内容:

Observable.withLatestFrom(...observables)

现在您无法知道哪个Observable是源,并且很难调试正在发生的事情。

所以没有Observable.withLatestFrom静态方法的原因是因为它没有多大意义。 Observables的顺序很重要,它会让事情变得更加模糊。

出于同样的原因,即使没有技术限制,bufferwindow等其他运营商也没有静态表格。它只是允许你编写更多命令式代码而不是简单地链接运算符。

答案 1 :(得分:2)

withLatestFrommerge不同,因为它具有规范“源”可观察的概念,可以通过另一个可观察的最新值进行扩充。 merge不像这样“层次化”,可观察量只是等于组合成一个流。