angular - 如何在 http 错误的情况下停止订阅
问题描述
我正在寻找一个想法,当 Interceptor 抛出 HttpError 时如何停止订阅任何方法。在我的 Angular 应用程序中,很少有组件可以使用以下方式从后端下载数据:
getItems(){
this.isProcessing = true;
this.itemsService.getItems().subscribe((x) => {
this.itemList = x;
this.isProcessing = false;
});
}
当数据请求开始时,isProcessing 设置为 true,并且 spinner 开始循环。收到数据后就停止了。每个单独的 http 请求都通过 HttpInterceptor 向请求添加令牌,并且在任何 http 错误的情况下都有错误处理程序。当用户没有权限下载某些数据时,错误 403 来自后端。我想要做的是显示带有一些信息的模态,停止订阅发出该请求的任何组件中的方法,并将 isSpinning 设置为 false,就像没有发生任何事情一样。我是否应该在 Interceptor 中创建一些 observable 并在每种方法中使用它来判断是否停止订阅?
解决方案
您需要使用错误回调,但仅当您未在拦截器中捕获错误时才有效
getItems(){
this.isProcessing = true;
this.itemsService.getItems().subscribe(
(x) => {
this.itemList = x;
this.isProcessing = false;
},
(error) => { this.isProcessing = false; }
}
);
}
因此,您要么在拦截器中捕获错误(用于记录目的或任何其他逻辑)并将其扔回,要么根本不捕获它。
推荐阅读
- php - 生成随机字符串并保存到wordpress中的用户元字段的问题
- node.js - 如何在 React Node Express 应用程序中修复“Content-Security-Policy: default-src 'none'”?
- sql - 将多行/列旋转为 1 行
- sql - 将内部联接查询的结果限制为 2 行
- python - 带智能卡的 Cades 数字签名
- python - 使用 Beautifulsoup 从网站上抓取标签,但跳过/忽略其他一些标签
- javascript - 添加geojsonlayer进行反应
- apache-spark - Pyspark:通过键对rdd的值应用reduce
- laravel - 如何在 laravel 的路由上使用中间件?
- javascript - 只运行一次函数直到 onmouseout