Angular全局加载器场景下使用RxJS combineLatest是否合理?
关于combineLatest在该场景下的适用性说明
结论:完全适用
你当前的用法完全匹配combineLatest的特性,也符合多独立加载状态控制全局加载器的需求,理由如下:
- 首先你的所有loading状态选择器都来自ngrx store,订阅时会立刻发出初始值(初始化默认为false),不会出现combineLatest因为某个Observable未发值导致一直不触发的问题
- combineLatest会监听所有传入的loading流,任意一个流的值发生变化都会触发重新计算,配合
isAnyTrue()操作符刚好可以实现「只要有一个接口请求中就显示全局加载器,所有请求都完成才关闭加载器」的逻辑,完美适配多接口并行请求的场景
优化建议
- 别忘了在组件的
ngOnDestroy生命周期钩子中调用this.loadingSubscription.unsubscribe()销毁订阅,避免内存泄漏 - 可以把多loading状态的组合逻辑抽到ngrx的全局选择器中,直接导出一个
globalLoading$选择器,后续新增其他业务模块的loading状态只需要修改选择器即可,不需要调整加载器组件的代码,逻辑聚合度更高:
// 全局选择器示例 export const selectGlobalLoading = createSelector( selectUsersState, selectBooksState, selectOrdersState, (usersState, booksState, ordersState) => usersState.usersLoading || booksState.booksLoading || ordersState.ordersLoading )
内容的提问来源于stack exchange,提问作者matikowy
相关产品推荐
相关产品推荐

