我有两个可观察的对象,我想与之结合combineLatest:
const o1 = from(['a', 'b', 'c']);
const o2 = of('content from o2');
combineLatest(o1, o2)
.subscribe(result => console.log(result));
Run Code Online (Sandbox Code Playgroud)
据我了解combineLatest,当任何observable 发出时,它将结合所有 observable 的最新值并发出它们:
当任何 observable 发出一个值时,从每个 observable 发出最新的值。( https://www.learnrxjs.io/operators/combination/combinelatest.html )
但是,使用上面的代码,输出是:
["c", "content from o2"]
Run Code Online (Sandbox Code Playgroud)
所以只有在o2发出时,才会combineLatest发出一个值。
如果我切换我移交的顺序o1和o2,它会按预期工作:
const o1 = from(['a', 'b', 'c']);
const o2 = of('content from o2');
combineLatest(o2, o1)
.subscribe(result => console.log(result));
Run Code Online (Sandbox Code Playgroud)
输出:
["content from o2", "a"]
["content from o2", "b"]
["content from o2", "c"]
Run Code Online (Sandbox Code Playgroud)
这是预期的行为吗?如果是这样,为什么?这似乎与 ob 的定义相矛盾combineLatest。
是的,在这种情况下顺序很重要,但这是一个时间问题。combineLatest 不能影响 observables 值的发出顺序。
在您的第一种情况下, o1 在 o2 发出其值之前发出所有值。在第二种情况下,o2 首先发出它的值,然后 o1 发出它的所有值。在现实世界的例子中,你有一个可观察值(服务调用等)的自然延迟,所以通常顺序无关紧要。
| 归档时间: |
|
| 查看次数: |
1022 次 |
| 最近记录: |