rxjs - 逻辑或组合 2 个或更多可观察流
问题描述
我有 2 个 observables 都表明它们是否正在加载数据。它们来自@ngrx/data。
loadingA$: Observable<boolean>
loadingB$: Observable<boolean>
我想使用 rxjs 或更优雅的方法将两者“逻辑或”结合起来做任何事情。也许是 ramdajs?也许是组合加载状态?然而,不同的组件需要不同的加载流组合。
另外,如果我有 20 个流怎么办,它不应该仅限于 2 个流。
(!)我不想分配额外的局部变量。
解决方案
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>