shareReplay меняет порядок - PullRequest
1 голос
/ 14 июня 2019

Я написал несколько Observable из массива [1, 2, 3, 4, 5], которые регистрируют на каждой итерации.Таким образом, я получаю вывод: 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 Ответ

2 голосов
/ 14 июня 2019

ShareReplay всегда воспроизводит последние два испущенных значения из наблюдаемой.Если вам нужны первые два, вы должны вместо этого использовать take(2).Если вам также нужна функция воспроизведения, вы все равно можете использовать shareReplay:

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

Еще одна вещь: когда вы используете shareReplay, вам не нужно использовать refCount, как он уже используетсяна shareReplay под капотом.Здесь есть очень хорошее объяснение .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...