javascript - 响应式编程 - 值大于 X 达 N 秒

标签 javascript reactive-programming

我有一个流 randStream,它每半秒发出一次随机值,还有一个 boolStream,它将值从 randStream 转换为 bool 值。

let randStream = Kefir.fromPoll(500, () => Math.random())
let boolStream = Kefir.map((rand) => rand > 0.5)

我想在 boolStream 发出 true 5 秒(连续)时发出 true。否则 emit 为假。

我正在使用 Kefir.js图书馆。

你有什么想法吗?谢谢。

最佳答案

在给定条件下,当您知道 randStream 发出数字的确切速率时,使用 .slidingWindow 很容易实现:

let result = boolStream
  .slidingWindow(10, 10)
  .map(items => _.every(items))
  .skipDuplicates();

如果您希望它适用于任何事件速率,您可以尝试类似的方法:

let result = boolStream
  .scan(({mostRecentFalse, latestValue}, bool) => {
    return bool ? 
      {mostRecentFalse, latestValue: true} : 
      {mostRecentFalse: Date.now(), lastValue: false}
  }, {mostRecentFalse: Date.now()})
  .changes()
  .map(({mostRecentFalse, latestValue}) => 
    latestValue && (Date.now() - mostRecentFalse > 5000))
  .skipDuplicates();

关于javascript - 响应式编程 - 值大于 X 达 N 秒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30185725/

相关文章:

javascript - 将 CodeMirror 应用于预先存在的 div

javascript - 为什么 Observable 操作对每个订阅者调用一次(重复)?

observer-pattern - 观察者模式和响应式(Reactive)编程有什么区别?

java - 减少 react 器中的 GroupedFlux

javascript - ExtJS 4.1 - 检索嵌套 JSON 的 hasOne 信息

javascript - Query.formatError 中 'users.email' 中的未知列 'where clause'

javascript - CSS flex : last and first item in a row selector

javascript - 使用 webpack 为 react-image-gallery 导入 CSS 时出错

java - rx-java 中的套接字看门狗