给出以下代码,我使用bufferCount
(不是我想要的)...
var Rx = require('rxjs/Rx');
var Observable = Rx.Observable;
var Subject = Rx.Subject;
var first = new Rx.Subject();
var source = first.bufferCount(2).map(a => a.reduce((acc,x) => acc+x,0));
var subscription = source.subscribe(console.log)
first.next(1)
first.next(2)
first.next(2)
first.next(3)
我得到了
3
5
我想要得到的是
3
4
5
所以缓冲区正在缓冲最后两项。
有没有办法简单地做到这一点?
答案 0 :(得分:3)
使用scan
运算符来保存滑动缓冲区,并对其执行操作。例如:
var source = first.scan((slidingBuffer, newInput) => {
return addTo(slidingBuffer, newInput)
}, [])
.map(processBuffer)
addTo
和processBuffer
函数具有明显的含义。
答案 1 :(得分:1)
您是否尝试过使用bufferCount
的{{1}} / skip
参数?这允许您生成重叠缓冲区,然后您可以根据需要减少缓冲区。这种方式不涉及发射您必须随后过滤掉的值。如果您特别希望缓冲区大小为2,则可以使用startBufferEvery
而不是bufferCount。
Keith: - 使用此方法的代码
pairwise