2

正如标题所说,我正在寻找一些组合collect器,它将同时发出的事件收集到一个列表中,类似于 Reactive-Banana 中的那个。换句话说:

collect :: EventStream a -> EventStream [a]
collect [(time1, e1), (time1, e2)] = [(time1, [e1,e2])]

如果它不存在,我将如何实现它?仔细阅读源代码,我看不到某种方式来读取事件发生的“时间”,例如Bacon.Event类似乎没有记录自己发生的时间?我是否应该只使用 Javascript 的本机函数事后new Date().getTime()标记事件,并且断言在某个任意时间范围内发生的事件实际上是“同时发生的”。

4

1 回答 1

2

Bacon.js 中没有事件同时性的概念。事件也不带有时间戳。

您可以使用 对大致同时发生的事件进行分组stream.bufferWithTime(1)。您将获得一系列大致同时发生的事件。

如果您需要输出中的时间,可以使用stream.map(f)将数组与当前时间组合的函数。

所以,像这样:

stream.bufferWithTime(1).map(function(events) {
  return {
    events: events,
    timestamp: new Date().getTime()
  }
})
于 2013-10-01T06:20:56.487 回答