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

Why withLatestFrom RxJS method not static?

RxJS withLatestFrom 是一个实例方法。必须更新 Observable 的实例 up/created 才能调用该方法。

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

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

withLatestFrommerge 不同,因为它具有规范 "source" 可观察值的概念,由另一个可观察值的最新值增强。 merge 不是这样的 "hierarchical",observables 只是被等量地组合成一个流。

我认为一个很好的例子是作为静态和实例方法存在的 combineLatest 运算符。源 Observables 到 combineLatest 的顺序无关紧要。它的内部结构以相同的方式工作并且输出将是相同的(只是结果数组中值的顺序将不同,这是无关紧要的)。 concatmergezipforkJoin等也是如此。

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

Observable.withLatestFrom(o1, o2, o3)

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

Observable.withLatestFrom(...observables)

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

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

出于同样的原因,即使没有技术限制,其他运算符(例如 bufferwindow 也没有静态形式。它只会让您编写更多命令式代码,而不是简单地链接运算符。