无法获得真正的bufferSize参数意味着什么以及它对它有什么影响。
有什么区别:
var published = source
.shareReplay();
var published = source
.shareReplay(0)
var published = source
.shareReplay(1);
var published = source
.shareReplay(10);
答案 0 :(得分:4)
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,...]