如何在http错误的情况下停止订阅

时间:2021-01-11 18:37:26

标签: angular typescript

我正在寻找一个想法,当拦截器抛出 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 并在每种方法中使用它来判断是否停止订阅?

3 个答案:

答案 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;
    }
  );
}

供参考:https://rxjs-dev.firebaseapp.com/guide/observable

答案 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;
  }
  });
相关问题