Does Bacon.js have some combinator that allows you to collect two events emitted at the same time?

StackOverflow https://stackoverflow.com/questions/19097017

  •  29-06-2022
  •  | 
  •  

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".

有帮助吗?

解决方案

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()
  }
})
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top