【问题标题】:Does Bacon.js have some combinator that allows you to collect two events emitted at the same time?Bacon.js 是否有一些组合器可以让您收集同时发出的两个事件?
【发布时间】:2013-10-06 11:33:15
【问题描述】:

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

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

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

【问题讨论】:

    标签: javascript frp bacon.js


    【解决方案1】:

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

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

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

    所以,是这样的:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-12
      • 2021-01-07
      • 1970-01-01
      • 2018-04-04
      • 2019-03-05
      • 2015-06-12
      • 2019-11-02
      • 2017-08-01
      相关资源
      最近更新 更多