Как создать воспроизводимую шину событий на rxjs - PullRequest
0 голосов
/ 07 июня 2018

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

Итак, я попытался использовать 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))

1 Ответ

0 голосов
/ 07 июня 2018

Я предполагаю, что вы ищете оператор withLatestFrom .

https://www.learnrxjs.io/operators/combination/withlatestfrom.html

Пример: https://stackblitz.com/edit/angular-pym83y

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