Мне нужно создать поток событий со всеми событиями моего приложения, мне нужно, чтобы этот поток можно было воспроизводить и иметь возможность (при необходимости) транслировать старые события в позднее инициализированные службы.
Итак, я попытался использовать ReplaySubject
, но потом не знаю оператора, чтобы избежать повторного воспроизведения при необходимости:
import {ReplaySubject, of} from 'rxjs'
import {combineLatest} from 'rxjs/operators'
const bus$ = new ReplaySubject
const one$ = of(1)
// later
bus$.next('foo')
bus$.next('bar')
bus$.next('baz')
// Then I want to subscribe and know about the older events also
bus$.subscribe(doSomething)
// Or I just want the latest values from the subject
bus$
.pipe(
combineLatest(one$),
// take only the real value from the bus
map(x => x[0]),
)
.subscribe(doSomething)
Я нашел только это придуманное решение ... Я думаю, что естьоператор для этого, или я просто ошибаюсь с моим решением, и есть совершенно другой подход ...
Заранее спасибо!
Обновление
Игра сrxjs 6 Я усовершенствовал свое текущее решение:
import {ReplaySubject, EMPTY} from 'rxjs'
import {combineLatest} from 'rxjs/operators'
import {unary} from 'ramda'
const eventsBus = new ReplaySubject()
export const events$ = eventsBus
export const latestEvents$ = events$.pipe(combineLatest(EMPTY, unary))