【问题标题】:How do I throw an error in a component and handle it in ErrorHandler?如何在组件中抛出错误并在 ErrorHandler 中处理它?
【发布时间】:2021-11-01 08:01:09
【问题描述】:

有我的拦截器类,它应该检查错误状态是否为 401,如果是,它会从服务调用 signOut() 方法,如果不是什么也不做:

@Injectable()
export class MyErrorHandler implements ErrorHandler {
  constructor(
    private UserService: UserService,
  ) {
  }
  
  handleError(error) {
    if (error?.status === 401) {
      this.UserService.signOut();
    }
  }
}

有我的组件:

@Component({
  ...
})
export class CartTableComponent implements OnInit {
  ...
  updateQuantity(i: number): void {
    this.CartService.update(i).subscribe(data => {
     ...
    })
  }
}

所以它起作用了。 ErrorHandler 处理它。

然后我需要组件在收到错误时做一些事情,所以我在那里添加错误状态:

@Component({
  ...
})
export class CartTableComponent implements OnInit {
  ...
  updateQuantity(i: number): void {
    this.CartService.update(i).subscribe(data => {
     ...
    }, error => {
       console.log('Some text should be shown when the method receives the error');
       throw new Error(error);
    })
  }
}

在我添加错误之后,ErrorHandler 不会处理错误。 handleError() 方法接收到 [Object object] 而不是 error 的 object 并且它无法读取 error?.status。

如何在组件中抛出错误并在 ErrorHandler 中处理?

【问题讨论】:

    标签: javascript angular typescript error-handling interceptor


    【解决方案1】:

    你试过直接抛出错误吗? throw error 而不是 throw new Error(error);?

    另外,如果你想检查请求,我认为最好使用HTTP_INTERCEPTOR 这种方法,你的拦截器将是第一个接收错误的元素,并且可以相应地处理(或传递)给组件。

    【讨论】:

      猜你喜欢
      • 2018-08-07
      • 2020-04-26
      • 1970-01-01
      • 2020-04-25
      • 2011-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-05
      相关资源
      最近更新 更多