如何在公共事件属性上join两个事件stream?

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

输入流

我想要将这两个事件具有相同时间戳的stream合并到一个具有应用的值转换的结果stream中。 如果一个数据stream缺less一个时间戳(例如下面例子中的黄色ts=3 ),那么该时间戳应该被忽略。

在这里输入图像描述

想用诸如xstream或rxjs之类的反应式编程库来解决这个问题。 我对于反应式编程的概念相当陌生,但是如果有人有另外一个build议,我就会全神贯注。 谢谢!

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

以下是xstream中的解决scheme:

 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。