2013-09-30 2 views
2

Как говорится в названии, я ищу комбайнер collect, который собирает события, выпущенные одновременно, в список, аналогичный тому, который найден в Reactive-Banana. Таким образом, другими словами:У Bacon.js есть комбинатор, который позволяет вам собирать одновременно два события?

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

Если он еще не существует, как бы его реализовать? Просматривая источник, я не вижу способа прочитать «время» возникновения события, например, класс Bacon.Event, похоже, не записывает время его возникновения? Должен ли я просто использовать встроенную функцию Javascript new Date().getTime(), чтобы отмечать события ex post facto и утверждать, что события, происходящие в некоторые произвольные временные рамки, фактически являются «одновременными».

ответ

2

В Bacon.js нет понятия одновременности событий. Также события не имеют временную метку.

Вы можете группировать примерно одновременные события, используя stream.bufferWithTime(1). Вы получите поток массивов примерно одновременных событий.

Если вам нужно время на выходе, вы можете использовать stream.map(f) с функцией, которая объединяет массив с текущим временем.

Так, что-то вроде этого:

stream.bufferWithTime(1).map(function(events) { 
    return { 
    events: events, 
    timestamp: new Date().getTime() 
    } 
})