shareReplay更改顺序

时间:2019-06-14 08:06:57

标签: angular typescript rxjs

我从数组[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

1 个答案:

答案 0 :(得分:2)

ShareReplay始终重播可观察对象的最后两个发出的值。如果需要前两个,则应改用take(2)。如果您还需要重播功能,则仍然可以使用shareReplay

this.numbers$.pipe(
  take(2),
  shareReplay()
).subscribe(data => console.log(data));

另一件事:使用shareReplay时不需要使用refCount,因为shareReplay已经在后台使用。此here有一个很好的解释。