Angular中HttpInterceptor抛出HttpError时如何终止请求订阅并重置加载状态?
Angular 通用HTTP错误场景下的组件状态同步问题
当前实现现状
- 应用内所有需要拉取后端数据的组件,都使用高度相似的逻辑处理请求,示例代码如下:
getItems() { this.isProcessing = true; this.itemsService.getItems().subscribe((x) => { this.itemList = x; this.isProcessing = false; }); }
- 加载状态规则:请求发起时将
isProcessing置为true,页面展示加载spinner;接收到正常响应后将isProcessing置为false,停止加载动画展示。 - 统一拦截器能力:全应用所有HTTP请求都会经过自定义
HttpInterceptor,拦截器内置两项通用能力:自动为请求附加身份认证token、处理通用HTTP异常逻辑。 - 权限异常规则:当用户对当前请求的接口没有访问权限时,后端会返回403错误码。
预期要实现的效果
- 当拦截器捕获到
HttpError异常时,自动弹出携带对应错误信息的全局模态提示框 - 自动终止所有触发该异常请求的组件内的对应订阅逻辑
- 自动将所有关联组件的加载状态重置为
false,让页面状态和请求从未发起时保持一致
当前的方案权衡疑问
目前正在评估实现路径:是否应该在
HttpInterceptor中创建一个共享Observable,让各个组件的请求调用逻辑都引入这个Observable,通过状态判断来决定是否需要主动终止对应的订阅?还是存在更贴合Angular设计规范的实现方案?
内容的提问来源于stack exchange,提问作者dlugasnyy
相关产品推荐
相关产品推荐

