You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

RXJS操作符combineLatestAll工作原理疑问:附代码与输出示例

combineLatestAll 运行逻辑拆解

核心前置知识

  • of 是冷、同步 Observable:只有被订阅时才会发射值,且所有值会在订阅瞬间同步全部发射完成,无延迟。
  • combineLatestAll 是高阶 Observable 操作符,运行规则如下:
    • 收集上游吐出的所有内部 Observable,直到上游 Observable 完成
    • 按顺序订阅所有收集到的内部 Observable
    • 等所有内部 Observable 都至少发射过1个值后,任意一个内部 Observable 发射新值,就将所有内部 Observable 的最新值按上游吐出的顺序拼接为数组,作为结果输出

代码执行分步推演

你给出的代码中,外层 of(1,2,3) 是同步流,会瞬间吐出1、2、3三个值,生成三个内部 Observable(记为 Obs1 对应v1=1、Obs2对应v1=2、Obs3对应v1=3)后立刻完成。此时 combineLatestAll 拿到全部三个内部 Observable,开始按顺序订阅:

  1. 订阅 Obs1:Obs1 同步发射 [1,100] → [1,101] → [1,102] → [1,103] → [1,104] 后完成,Obs1 最新值停留在 [1,104]
  2. 订阅 Obs2:Obs2 同步发射 [2,100] → [2,101] → [2,102] → [2,103] → [2,104] 后完成,Obs2 最新值停留在 [2,104]
  3. 订阅 Obs3:Obs3 开始同步发射值,此时三个内部 Observable 都已存在有效最新值,每发射一个值就触发一次结果输出:
    • 发射 [3,100] → 输出 [[1,104],[2,104],[3,100]]
    • 发射 [3,101] → 输出 [[1,104],[2,104],[3,101]]
    • 发射 [3,102] → 输出 [[1,104],[2,104],[3,102]]
    • 发射 [3,103] → 输出 [[1,104],[2,104],[3,103]]
    • 发射 [3,104] → 输出 [[1,104],[2,104],[3,104]]

逻辑验证

如果给内部的 of 加上延迟,改造成异步流,你会看到前两个 Observable 的中间值也会参与组合,输出结果会和现在完全不同,就能更直观感受到 combineLatestAll 的组合逻辑。

内容的提问来源于stack exchange,提问作者devguy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 13:54:04