Entschuldigung, ich kann ES6 noch nicht schreiben, aber ... die Idee ist, wenn dein Original-Stream einmal pro halbe Sekunde Sampling ist, sind fünf Sekunden true
elf Wahrheiten in einer Reihe, richtig?
// generate random numbers
var randStream = Kefir.fromPoll(500, function() {
return Math.random();
});
// make into booleans
var boolStream = randStream.map(function(rand) {
return rand > 0.5;
});
// count trues in a row
var trueStreakStream = boolStream.scan(function(numTrue, curr) {
return curr ? numTrue + 1 : 0;
}, 0);
// see when there's exactly 11 of them
var elevenTruesStream = trueStreakStream.filter(function(numTrue) {
return numTrue == 11;
});
// react
elevenTruesStream.onValue(function(numTrue) {
console.log("five seconds of true!");
});
EDIT: Ich lese gerade Ihre Frage noch einmal; Wenn Sie einen Stream wollen, dass true
, wenn alle Ihre letzten 5 Sekunden true
waren sein wird, verwenden Sie dann map
statt filter
(und >=
statt ==
):
var lastElevenAreTrueStream = trueStreakStream.map(function(numTrue) {
return numTrue >= 11;
});