首页 > 解决方案 > 给 combineLatest 的 observables 的顺序是否相关?

问题描述

我有两个要结合的可观察对象combineLatest

const o1 = from(['a', 'b', 'c']);
const o2 = of('content from o2');
combineLatest(o1, o2)
  .subscribe(result => console.log(result));

据我了解combineLatest,当任何observable 发出时,它将结合所有 observable 的最新值并发出它们:

当任何 observable 发出一个值时,从每个发出最新的值。(https://www.learnrxjs.io/operators/combination/combinelatest.html

但是,使用上面的代码,输出是:

["c", "content from o2"]

所以只有在o2发出时,才会combineLatest发出一个值。

如果我切换我交出的订单o1o2,它会按预期工作:

const o1 = from(['a', 'b', 'c']);
const o2 = of('content from o2');
combineLatest(o2, o1)
  .subscribe(result => console.log(result));

输出:

["content from o2", "a"]
["content from o2", "b"]
["content from o2", "c"]

这是预期的行为吗?如果是这样,为什么?这似乎与 ob 的定义相矛盾combineLatest

标签: rxjsreactive

解决方案


是的,在这种情况下,顺序很重要,但这是一个时间问题。combineLatest 不能影响可观察值的发出顺序。

在您的第一种情况下, o1 在 o2 发出其值之前发出所有值。在第二种情况下, o2 首先发出它的值,然后 o1 发出它的所有值。在现实世界的示例中,您有可观察值(服务调用等)的自然延迟,因此通常顺序无关紧要。


推荐阅读