Niestety, nie mogę napisać jeszcze ES6, ale ... chodzi o to, że jeśli twój pierwotny strumień jest próbkowany raz na pół sekundy, pięć sekund true
jest jedenaście razy z rzędu, prawda?
// 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!");
});
EDYCJA: Właśnie przeczytałem twoje pytanie znowu; jeśli chcesz strumień, który będzie true
jeśli wszystkie ostatnich 5 sekundach były true
, a następnie użyć map
zamiast filter
(i >=
zamiast ==
):
var lastElevenAreTrueStream = trueStreakStream.map(function(numTrue) {
return numTrue >= 11;
});