RxJS - 如何累积数据并对其进行操作,无需多次回调

时间:2016-12-30 07:05:07

标签: javascript node.js rxjs rxjs5

所以这段代码运行了,但它在.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次?

2 个答案:

答案 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