正如标题所说,我正在寻找一些组合器 collect
,它将同时发出的事件收集到一个列表中,类似于 Reactive-Banana 中的组合器。换句话说:
collect :: EventStream a -> EventStream [a]
collect [(time1, e1), (time1, e2)] = [(time1, [e1,e2])]
如果它不存在,我将如何实现它?仔细阅读源代码,我没有看到某种方法来读取事件发生的“时间”,例如 Bacon.Event 类似乎没有记录其自身发生的时间?我是否应该使用 Javascript 的原生 new Date().getTime()
函数来标记事件事后,并断言在某个任意时间范围内发生的事件实际上是“同时发生的” ”。
最佳答案
Bacon.js 中没有事件同时性的概念。这些事件也不带有时间戳。
您可以使用stream.bufferWithTime(1)
对大致同时发生的事件进行分组。您将获得大致同时发生的事件的数组流。
如果您需要输出中的时间,可以将 stream.map(f)
与将数组与当前时间相结合的函数结合使用。
所以,像这样:
stream.bufferWithTime(1).map(function(events) {
return {
events: events,
timestamp: new Date().getTime()
}
})
关于javascript - Bacon.js 是否有一些组合器可以让您收集同时发出的两个事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19097017/