我从数组[1,2,3,4,5]中写了一些Observable,它在每次迭代时记录。所以我得到的输出是:1,2,3,4,5像它应该的样子。
当我添加shareReplay(2)时,我得到了最后两个迭代-4,5。对我来说没有任何意义。我原本希望得到1,2作为输出。
numbers$: Observable<number> = from([1, 2, 3, 4, 5, 6, 7]);
ngOnInit() {
this.numbers$.pipe(
shareReplay(2),
refCount()
).subscribe(data => console.log(data));
}
我在stackBlitz上找到了它:https://stackblitz.com/edit/hello-angular-6-yb387t?file=src/app/app.component.ts
答案 0 :(得分:2)
ShareReplay
始终重播可观察对象的最后两个发出的值。如果需要前两个,则应改用take(2)
。如果您还需要重播功能,则仍然可以使用shareReplay
:
this.numbers$.pipe(
take(2),
shareReplay()
).subscribe(data => console.log(data));
另一件事:使用shareReplay
时不需要使用refCount
,因为shareReplay
已经在后台使用。此here有一个很好的解释。