RxJS combineLatest操作符在多Observable同时发射值时的工作机制
关于RxJS
combineLatest 在同时发射场景下的工作机制 首先明确combineLatest的核心行为:
每当任意一个输入Observable发射新值时,就会立即将所有输入Observable的当前最新值组合后发射出去。
你的示例场景拆解
你的代码中:
a$会在0s、1s、2s、3s、4s分别发射0、1、2、3、4(共5次)b$会在0s、4s、8s、12s、16s分别发射0、1、2、3、4(共5次)
4秒时的输出逻辑
在4秒这个时间点,a$ 和 b$ 都会发射新值,但它们的发射是按顺序执行的(即使时间差极小):
- 首先
a$发射4:此时b$的最新值还是之前的0,所以combineLatest会立即组合出[4, 0]并输出。 - 紧接着
b$发射1:此时a$的最新值已经更新为4,所以combineLatest会再次组合出[4, 1]并输出。
这就是为什么你会看到两个连续输出——combineLatest对每个输入Observable的每一次发射都会响应,而不是等待所有输入都完成一轮发射后才输出一次最新组合。
补充验证
如果调整b$的发射时间比a$晚几毫秒(比如timer(4001, 4000)),你会看到4秒时先输出[4, 0],1毫秒后输出[4, 1],逻辑完全一致。
内容的提问来源于stack exchange,提问作者mprakhar1705
相关产品推荐
相关产品推荐

