嵌套可观察过滤

时间:2021-07-22 12:03:22

标签: rxjs observable

我有一个包含项目列表的 Observable。每个项目都有一个 selected$(布尔值)可观察对象。我需要过滤掉具有非真值的项目。

这是我的解决方案,感觉有点麻烦,但确实可以。有没有更好的解决方案?

interface ICarrier {
  readonly id: number;
  readonly selected$: Observable<boolean>;
}

const allCarriers$ = of<readonly ICarrier[]>([]); // Placeholder value!
const selectedCarriers$ = allCarriers$.pipe(
  switchMap(carriers => {
    return combineLatest(carriers.map(carrier => carrier.selected$.pipe(
      map(selected => selected ? carrier : null),
    ))).pipe(
      // Prevent multiple filtering when multiple values changes at once.
      debounceTime(0),
      // filter out null values
      map(carriers => carriers.filter((carrier): carrier is ICarreir => !!carrier)),
    );
  }),
);

0 个答案:

没有答案