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

RX编程:合并两个Observable序列获得指定输出的实现问题

Rx序列按主序列触发取副序列最新值的实现方案

你需要的是只有当o1推送新元素时,才取o2的最新推送值配对生成新元素,这个场景正好匹配Rx中WithLatestFrom操作符的语义,实现代码如下:

// 主序列为o1,每次o1推送新值时取o2的最新值组合
var o3 = o1.WithLatestFrom(o2, (val1, val2) => new { O1Value = val1, O2Value = val2 });
// 如需生成你示例中拼接格式的输出,可将组合逻辑改为 $"{val1}{val2}"

原操作符不生效的原因

  • Zip:要求两个序列按顺序各推送一个新元素才会生成配对结果,会严格一一对应攒值,不符合o2可推送多个值、仅取o1触发时刻最新值的需求
  • CombineLatest:只要任意一个序列推送新值就会生成配对结果,会产生大量o2触发的多余输出,不符合仅由o1触发输出的要求

兼容旧版本Rx的替代实现

如果使用的Rx版本没有提供WithLatestFrom操作符,可使用如下写法实现相同效果:

var o3 = o2.CombineLatest(o1, (val2, val1) => new { O1Value = val1, O2Value = val2 })
           .Sample(o1);

以上实现输出结果和你给出的弹珠图完全匹配:o1推送1时取o2最新的a、推送2时取o2最新的c、推送3时取o2最新的e,完全符合o3的预期输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 11:54:03