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

RxJS中withLatestFrom忽略BehaviorSubject初始值问题排查

BehaviorSubject初始值被忽略的原因分析

这是withLatestFrom操作符的特性导致的,核心逻辑如下:

  • withLatestFrom的工作机制是:只有源Observable(此处为frameRateSubject)发出新值时,才会尝试获取第二个Observable(loadedMetadata$)的最新值,两者组合后才会输出结果。
  • 但这个操作符有个关键前提:第二个Observable必须已经至少发出过一次值,否则即便源Observable发出值,withLatestFrom也不会产生任何输出。

对应你的代码场景:

  • frameRateSubject作为BehaviorSubject,订阅时会立即发出初始值24,但此时loadedMetadata$(绑定了video的loadedmetadata事件)还未触发,没有任何可用值。
  • 所以withLatestFrom无法完成组合,初始值24的推送被直接过滤掉,tap里自然接收不到。
  • 10秒后调用frameRateSubject.next(20)时,若此时video的loadedmetadata事件已经触发(loadedMetadata$已有值),withLatestFrom就能拿到对应的事件值,组合后输出20,因此能被tap捕获。

注释掉withLatestFrom后,frameRateSubject的所有值都会直接推送,所以能接收到初始值24和后续的20。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 21:25:38