Канал RxJs, который содержит данные при загрузке, испускает при загрузке, позволяет испускать при загрузке - PullRequest
1 голос
/ 04 октября 2019

У меня есть две трубы, одна используется в качестве данных для графика, другая - как индикатор загрузки данных

graphData$: Observable<GraphData>;
dataLoaded$: Observable<boolean>;

Мне нужна следующая труба: graphData$ выбросы необходимо прекратить, когдаdataLoaded$ излучает false. Когда dataLoaded$ переключается с false на true, я хочу, чтобы последний остановленный выброс graphData$ был выпущен через канал. Когда graphData$ излучает true Я хочу просто обойти трубу.

Пока я решаю это следующим образом:

combineLatest([
  graphData$,
  dataLoaded$
]).pipe(
    filter(([_, dataLoaded]) => dataLoaded),
    map(([graphData]) => graphData)
).subscribe(graphData => blabla)

Но есть произвольное числопотоков данных, которые должны быть ограничены тем, загружены ли данные, поэтому я бы предпочел канал, который позволяет мне просто:

graphData$.pipe(
  dataLoaded()
).subscribe(graphData => blabla)

Любые изящные решения о том, как это сделать?

1 Ответ

1 голос
/ 04 октября 2019

Я нашел одно решение, которое могло бы решить эту проблему:

dataLoaded = (): UnaryFunction<Observable<T>, Observable<T>> => 
  pipe(
    switchMap(val => 
      dataLoaded$.pipe(
        filter(Boolean),
        mapTo(val)
      )
    )
  )

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

...