逻辑或合并2个或更多可观察的流

时间:2019-10-20 01:14:14

标签: rxjs ngrx

我有2个可观察值,它们均指示它们是否正在加载数据。它们来自@ ngrx / data。

loadingA$: Observable<boolean>
loadingB$: Observable<boolean>

我想使用rxjs或更优雅的方法将两者“逻辑或”起来,以在两者均为真时做任何事情。也许是ramdajs?还是合并的加载状态?但是,不同的组件需要不同的加载流组合。

另外,如果我有20个流,那不应该仅限于2个流。

(!)我不想分配其他局部变量。

1 个答案:

答案 0 :(得分:1)

combineLatest(loadingA$, loadingB$).pipe(map((a, b) => a || b));

const anyLoading = (...observables: Observable<boolean>[]) => combineLatest(observables).pipe(
  map(bools => bools.some(loading => loading))
);

并使用它

anyLoading(loadingA$, loadingB$);

const { combineLatest, BehaviorSubject } = rxjs;
const { map } = rxjs.operators;

const anyLoading = (...observables) => combineLatest(observables).pipe(
  map(bools => bools.some(loading => loading))
);

const loadingA$ = new BehaviorSubject(false);
const loadingB$ = new BehaviorSubject(true);

anyLoading(loadingA$, loadingB$).subscribe(loading => { console.log(loading); });

loadingB$.next(false);
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/6.5.3/rxjs.umd.min.js"></script>