如何在一个公共事件 属性 上加入两个事件流?

How to join two event streams on a common event property?

考虑以下两个事件流。每个事件都有一个 timestamp/ts 和值 属性。

我想将事件具有相同时间戳的这两个流组合成一个结果流,并应用值转换。如果一个流缺少一个时间戳(例如下面示例中的黄色 ts=3),则应忽略该时间戳。

想使用 xstream or rxjs 等响应式编程库解决问题。我对反应式编程的概念还很陌生,但如果有人有其他建议,我会洗耳恭听。谢谢!

只需使用 combineLatest 并仅传递那些具有匹配时间戳的组合。其他组合映射到 null,您稍后将其过滤掉。

这是 xstream 中的解决方案:

var streamOut = xs.combine(
  (a, b) => {
    if (a.ts === b.ts) {
      return {ts: a.ts, value: a.value + b.value};
    } else {
      return null;
    }
  },
  streamA, streamB
).filter(x => x !== null);

在 JSBin 中检查 运行: https://jsbin.com/saxawatuza/edit?js,console.