Потоки RxJs - поток с несколькими потоками, генерирующий один основной поток

noob спросил: 03 февраля 2018 в 11:36 в: typescript

У меня есть главный список массива объектов, а затем два других списка вариантов, представленных также массивами. У меня это как 3 потока $.

master$
filter1$
filter2$

В пользовательском интерфейсе master $ привязан к datatable, используя асинхронный канал в angular.filter1 $ и filter2 $ привязаны к UI выпадающие списки в качестве выбора фильтра.

В любой момент фильтр1 $ и фильтр $ могут меняться в зависимости от того, что выбирает пользователь. Я чувствую, что должен быть способ объединить 3 потока вместе и применить оба фильтра, если это необходимо. Как я могу сделать это в RxJs? Можете ли вы показать мне пример. Могу ли я получить простой, читаемый код с помощью combLatest, pipe и map?

Обновление:

Ниже мое текущее решение, способ создать это:

combineLatest(
  master$.shareReplay(1),
  filter1$.shareReplay(1),
  filter2$.shareReplay(1)
)
  .map(([master, filter1, filter2]) => {
    let filtered = master;
    if (filter1.length > 0) {
      filtered = [];
      filtered = master.filter(each => filter2.indexOf(each.organizationId) !== -1);
    }
    if (filter1.length > 0) {
      master = filtered;
      filtered = [];
      filtered = master.filter(each => filter2.indexOf(each.organizationId) !== -1);
    }
    return filtered;
  })
  .subscribe(final => {
    this.list = final;
  });

}


0 ответов