bufferWithCount.md
January 28, 2016 ยท View on GitHub
Buffer every N events and emit as single event
import Most from "most";
import {add, append, curry, takeLast} from "ramda";
// Number -> Stream a -> Stream [a]
let buffer = curry((n, s$) => {
return s$
.loop((memo, item) => {
let value = takeLast(n, append(item, memo));
let seed = value.length == n ? [] : value;
return {seed, value};
}, [])
.filter(x => x.length == n)
});
let s$ = Most
.periodic(100, 1)
.scan(add, 0); // 0--1--2--...
buffer(3, s$) // [0, 1, 2]--[3, 4, 5]--...
.observe(console.log);