rxjs - 逻辑或组合 2 个或多个可观察流

标签 rxjs ngrx

我有 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>

关于rxjs - 逻辑或组合 2 个或多个可观察流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58469287/

相关文章:

javascript - rxjs 合并在 Angular5 中无法按预期工作

Angular:从 FileReader 返回 Observable/ES6 Promise

javascript - 在 Angular 中使用 ngrx 时捕获超时错误

angular - 无法分配给深层复制对象上的只读属性

angular - "Progressively"在 NgRx 中从 RESTful API 加载实体

angular - NgRx 对 switchMap 和 catchError 的影响 - 有人可以解释我的代码和 'correct' 代码之间可观察到的工作流的区别吗?

javascript - Angular - Ngrx - 来自多个源和组件渲染的更新

rxjs - RxJs Observables嵌套订阅吗?

javascript - RxJS 5 Observable 和变量范围又名为什么我的变量不可读

reactjs - React 组件订阅太晚了。如何避免失去第一场比赛?