微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

原文地址:https://www.jb51.cc/js/157896.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐