rxjs - 给 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
发出一个值。
如果我切换我交出的订单o1
和o2
,它会按预期工作:
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
。
解决方案
是的,在这种情况下,顺序很重要,但这是一个时间问题。combineLatest 不能影响可观察值的发出顺序。
在您的第一种情况下, o1 在 o2 发出其值之前发出所有值。在第二种情况下, o2 首先发出它的值,然后 o1 发出它的所有值。在现实世界的示例中,您有可观察值(服务调用等)的自然延迟,因此通常顺序无关紧要。
推荐阅读
- jenkins - 从目录中将 jenkins 安装到 ICP(IBM Cloud Private)中后,它不可用
- android - 如何使用 javafxports 使 Android 应用程序全屏显示?
- asp-classic - 如何使用 ADO 命令和 Oracle 存储过程检索输出参数
- content-management-system - Taxonomy in multilingual environment
- google-chrome - 如何从 Chrome API 获取归档历史记录
- javascript - Edge mediaDevices 无效参数
- c# - 除了使用 ssis 将数据从 sql server 获取到 oracle 之外,还有其他方法吗?
- visual-studio-code - 为什么 VS Code 会破坏我的 Markdown 防护代码块?
- regex - 如何在 jmeter 中创建正则表达式提取器
- linux - 我正在尝试创建一个 payara 集群,但在创建远程节点期间出现错误