我正在寻找一个想法,当拦截器抛出 HttpError 时,如何停止订阅任何方法。在我的 Angular 应用程序中,很少有组件使用如下方式从后端下载数据:
getItems(){
this.isProcessing = true;
this.itemsService.getItems().subscribe((x) => {
this.itemList = x;
this.isProcessing = false;
});
}
当数据请求开始时,isProcessing 设置为 true 并且微调器开始循环。收到数据后停止。每个单独的 http 请求都通过 HttpInterceptor,它会向请求添加令牌,并在出现任何 http 错误时具有错误处理程序。 当用户无权下载某些数据时,错误 403 来自后端。我想要做的是用一些信息显示模态,停止订阅任何发出该请求的组件中的方法,并将 isSpinning 设置为 false 就像没有发生任何事情一样。 我是否应该在 Interceptor 中创建一些 observable 并在每种方法中使用它来判断是否停止订阅?
答案 0 :(得分:1)
您需要使用错误回调,但只有当您没有在拦截器中捕获错误时才有效
getItems(){
this.isProcessing = true;
this.itemsService.getItems().subscribe(
(x) => {
this.itemList = x;
this.isProcessing = false;
},
(error) => { this.isProcessing = false; }
}
);
}
因此您要么在拦截器中捕获错误(用于记录目的或任何其他逻辑)并将其返回,要么根本不捕获它。
答案 1 :(得分:0)
您可以使用 error
方法的 subscribe()
回调如下:
getItems(){
this.isProcessing = true;
this.itemsService.getItems().subscribe(
(x) => {
this.itemList = x;
this.isProcessing = false;
},
(error) => {
// Create your modal here
this.isProcessing = false;
}
);
}
答案 2 :(得分:0)
试试这个
getItems(){
this.isProcessing = true;
this.itemsService.getItems().subscribe((x) => {
if(x !=null || x != undefined) {
this.itemList = x;
this.isProcessing = false;
}
else {
this.isProcessing = false;
}
});