use*_*183 7 javascript reactive-programming
我有一个流randStream,每半秒发出一次随机值boolStream,并将值转换randStream为布尔值.
let randStream = Kefir.fromPoll(500, () => Math.random())
let boolStream = Kefir.map((rand) => rand > 0.5)
Run Code Online (Sandbox Code Playgroud)
我想true在boolStream发射true5秒(连续)时发射.否则是emit假的.
我正在使用Kefir.js库.
你有什么想法?谢谢.
在给定的条件下,当您知道randStream发出数字的确切速率时,可以很容易地通过以下方式实现.slidingWindow:
let result = boolStream
.slidingWindow(10, 10)
.map(items => _.every(items))
.skipDuplicates();
Run Code Online (Sandbox Code Playgroud)
如果您希望它能够处理任何发生率的事件,您可以尝试以下操作:
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();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
107 次 |
| 最近记录: |