RxJS:shareReplay中的bufferSize是什么?

时间:2016-01-21 11:05:55

标签: rxjs

无法获得真正的bufferSize参数意味着什么以及它对它有什么影响。

有什么区别:

var published = source
    .shareReplay();

var published = source
    .shareReplay(0)

var published = source
    .shareReplay(1);

var published = source
    .shareReplay(10);

2 个答案:

答案 0 :(得分:4)

BufferSize:

  • BufferSize表示缓存和重放的项目数
  • 订阅后,它将重播特定数量的发射
  • 即使没有订阅者,项目仍保持缓存状态

出现问题:

var published = source
    .shareReplay();

任何订阅者将获得源发出的所有项目/数据流

var published = source
    .shareReplay(0)

它将缓存上一次发出的值

var published = source
    .shareReplay(1);

它将缓存上一次发出的值,与上面相同

var published = source
    .shareReplay(10);

它将缓存源发出的最后10个项目。

更多信息: 我将通过一个示例来解释这个概念。

 let source$ = interval(1000)
  .pipe(
    take(5),
    shareReplay(3)
  )
source$.subscribe(res => console.log('1st time=>', res))

setTimeout(() => {
  source$.subscribe(res => console.log('2nd time=>', res))
}, 5000)

注意:这里的第一次订阅只是意味着开始发出值。使用 take 运算符来限制发射间隔时,它将发射5倍于我的值。 它将导致输出:

1st time=> 0
1st time=> 1
1st time=> 2
1st time=> 3 
1st time=> 4

现在,仅关注可观察的第二个:我们可以看到bufferSize值设置为3,因此它将记录最后三个发出的值

2nd time=> 2
2nd time=> 3
2nd time=> 4

答案 1 :(得分:1)

source     --1--2--3--4--5--6--7
subscriber -----------S---------

source.shareReplay(2) subscriber将获得[2, 3, 4, 5,...]