Angular 角度4-从拦截器返回HttpErrorResponse

Angular 角度4-从拦截器返回HttpErrorResponse,angular,error-handling,observable,interceptor,Angular,Error Handling,Observable,Interceptor,这是我的拦截器 intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> { return next.handle(req) .catch(err => { if (err instanceof HttpErrorResponse) { this.errorControl(req, err.stat

这是我的拦截器

intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    return next.handle(req)
      .catch(err => {
        if (err instanceof HttpErrorResponse) {
          this.errorControl(req, err.status);
          return Observable.throw(err);
        }
      });
  }
但是我需要一个带有状态、状态文本等的HttpErrorResponse

删除拦截器解决了我的问题,但我需要它来处理所有会话内容。

您的代码如下:

if (err instanceof HttpErrorResponse) {
  this.errorControl(req, err.status);
  return Observable.throw(err);
}
但是我在任何地方都看不到
其他的

这意味着当您的错误不是
HttpErrorResponse
的实例时,您不会返回错误


在任何情况下,您都应该返回一个可观测值,而不仅仅是在它适合您的时候

你能发布你的
errorControl(req,err.status)
函数的内容吗?你能显示它实际导致错误的代码吗?你是怎么发现订阅中的错误的?你告诉我不管发生什么都要抛出错误吗?无论如何,这并不能完全解决我的问题,例如,在400状态码错误的情况下,我仍然得到上面的消息,而不是HttpErrorResponseWell,这就是拦截器的工作方式。。。无论发生什么,你都应该把错误(或成功!)传递出去,而在你的情况下,你却没有。如果你在所有情况下都返回错误,你不会得到一个
未定义的
错误,我很确定。我现在返回条件之外的错误,如果它得到了捕获,它应该发送它,不管它的类型是什么,但我仍然得到未定义的东西。我有很多拦截器,这一个是最后一个,即使我在最后一个拦截器中捕捉到HttpErrorResponse,我的问题也会因此而产生吗?如果你在其他拦截器中做了同样的事情,那么你的问题不在这一个中。。。你需要每次都返回错误,而不仅仅是在适合你的时候。啊哈,我不需要你的投票,但我知道你的问题,让我去吧
if (err instanceof HttpErrorResponse) {
  this.errorControl(req, err.status);
  return Observable.throw(err);
}