我有一个流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();