Воспроизвести предмет из Observable (выбросить все предыдущие события) - PullRequest
0 голосов
/ 30 декабря 2018

У меня есть наблюдаемый объект, и я пытаюсь создать тему для воспроизведения.Он должен излучать текущие и все предыдущие события, которые излучала наблюдаемая.

Вот то, что я думал, будет работать, согласно этому ответу :

// create an observable from dummy array and a blank replay subject
const observable$ = from([1, 2, 3])
const replay$ = new ReplaySubject()

// create a replay subject from the observable (not working as expected)
observable$.subscribe(replay$)

// log out the events
observable$.subscribe(e => console.log('observable', e) )
replay$.subscribe(e => console.log('replay', e))

Журналам

observable 1
observable 2
observable 3
replay 1
replay 2
replay 3

Требуемое поведение таково, что субъект воспроизведения воспроизводит и предыдущие события, например:

replay [1]
replay [1, 2]
replay [1, 2, 3]

Как мне это заархивировать?

1 Ответ

0 голосов
/ 30 декабря 2018

ReplaySubject воспроизводит всю последовательность только по подписке.Это значит только когда вы звоните replay$.subscribe().После этого он только проходит через все выбросы.

Из того, что вы хотите получить, похоже, что вы хотите связать его с scan(), потому что ReplaySubject испускает элементы один за другим, а не как накопленные массивы, как выожидайте.

observable$.pipe(
  scan((acc, val) => [...acc, val], []),
).subscribe(replay$);

Демонстрация в реальном времени: https://stackblitz.com/edit/rxjs-yfgkvf?file=index.ts

...