javascript - Bacon.js 是否有一些组合器可以让您收集同时发出的两个事件?

标签 javascript frp bacon.js

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

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

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

最佳答案

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

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

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

所以,像这样:

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

关于javascript - Bacon.js 是否有一些组合器可以让您收集同时发出的两个事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19097017/

相关文章:

javascript - Javascript 中返回多个参数

haskell - react 香蕉 : how to use values from a remote API and merge them in the event stream

javascript - 基于终止属性提取子流

javascript - jQuery Mobile 中的多页表单丢失单选值

javascript - 翻译docker yaml文件时出现不规则符号

javascript - 正则表达式组与空格匹配

haskell - Elm 的信号系统可以作为 Haskell 库使用吗?

reactjs - 使用 React 的高阶 FRP - 为什么它没有发生?

javascript - Bacon.js 在另一个 EventStream 触发时重新启动缓冲

javascript - Bacon中如何根据一些EventStream的变化来切换流