javascript – 反应式编程 – N秒内的值大于X.

前端之家收集整理的这篇文章主要介绍了javascript – 反应式编程 – N秒内的值大于X.前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个流randStream,它每半秒发出一次随机值,boolStream将randStream中的值转换为boolean.
let randStream = Kefir.fromPoll(500,() => Math.random())
let boolStream = Kefir.map((rand) => rand > 0.5)

当boolStream发出5秒(连续)时,我想发出true.否则发出假.

我正在使用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相关文章