所以这段代码运行了,但它在.flatmap中触发了5次回调:
var i = 0;
const values = {};
return this.obsClient.take(5)
.flatMap(v => {
const time = Date.now();
values[i] = {time: time, count: v.clientCount};
console.log('values => ', values);
i++;
return Rx.Observable.timer(100)
});
" values => X"将被记录5次。
我想如果我做了以下操作,它会在触发flatMap回调之前累积所有5个数据:
var i = 0;
const values = {};
return this.obsClient.take(5).takeLast(5)
.flatMap(v => {
const time = Date.now();
values[i] = {time: time, count: v.clientCount};
console.log('values => ', values);
i++;
return Rx.Observable.timer(100)
});
但它仍记录" values => X" 5次。 如何累积数据,并将所有数据传递给回调并避免触发回调5次?
答案 0 :(得分:3)
如果您只想要序列中的最后五个项目:
return this.obsClient
.takeLast(5)
.toArray()
.flatMap(arr => { /*arr will be an array of the last five items in the sequence */ })
答案 1 :(得分:2)
您可能正在寻找bufferCount
:
return this.obsClient.bufferCount(5).flatMap(buffer => {
console.log(`buffer => ${buffer}`);
return Rx.Observable.timer(100);
});
缓冲源Observable值,直到大小达到给定的最大
bufferSize
。