首页 > 解决方案 > 如何在 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 并在每种方法中使用它来判断是否停止订阅?

标签: angulartypescript

解决方案


您需要使用错误回调,但仅当您未在拦截器中捕获错误时才有效

getItems(){
  this.isProcessing = true;
  this.itemsService.getItems().subscribe(
    (x) => {
      this.itemList = x;
      this.isProcessing = false;
    },
    (error) => { this.isProcessing = false; }
   }
  );
}

因此,您要么在拦截器中捕获错误(用于记录目的或任何其他逻辑)并将其扔回,要么根本不捕获它。


推荐阅读