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

ham*_*son 8 javascript xstream reactive-programming node.js rxjs

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

输入流

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

在此输入图像描述

想使用诸如xstreamrxjs之类的反应式编程库来解决问题.我对反应式编程的概念很陌生,但如果有人有另一个建议,我会全神贯注.谢谢!

And*_*ltz 2

只需使用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);
Run Code Online (Sandbox Code Playgroud)

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