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();

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...