2

As the title says, I am looking for some combinator collect that collects events emitted at the same time into a list, similar to the one found in Reactive-Banana. So in other words:

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

If it does not exist already, how would I implement it? Perusing the source, I don't see some way to read the "time" of an event's occurrence, for example Bacon.Event class does not seem to record the time of its own occurrence? Should I just use Javascript's native new Date().getTime() function to mark events ex post facto, and assert events happening within some arbitrary time frame are in fact "simultaneous".

xiaolingxiao
  • 4,793
  • 5
  • 41
  • 88

1 Answers1

2

There's no notion of event simultaneity in Bacon.js. Neither do the events carry a timestamp.

You can group roughly simultaneous events using stream.bufferWithTime(1). You'll get a stream of arrays of roughly simultaneous events.

If you need the time in the output, you can use stream.map(f) with a function that combines the array with the current time.

So, something like this:

stream.bufferWithTime(1).map(function(events) {
  return {
    events: events,
    timestamp: new Date().getTime()
  }
})
raimohanska
  • 3,265
  • 17
  • 28