如何在公共事件属性上连接两个事件流?

时间:2016-04-26 18:31:10

标签: javascript node.js reactive-programming rxjs xstream

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

Input stream

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

enter image description here

希望使用xstreamrxjs等反应式编程库来解决问题。我对反应式编程的概念很陌生,但如果有人提出另一个建议,那我就是全智能的。谢谢!

1 个答案:

答案 0 :(得分:3)

只需使用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