Angular 4 - 从拦截器返回HttpErrorResponse

时间:2018-01-18 08:50:32

标签: 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.status);
          return Observable.throw(err);
        }
      });
  }

我需要捕获从我的组件中的服务器发送的错误,因为我必须采取相应的行动(404:返回上一个URL,400:显示消息等)。当我在订阅observable中捕获错误时,我得到了这个

"You provided 'undefined' where a stream was expected. You can provide an Observable, Promise, Array, or Iterable."

但我需要一个HttpErrorResponse及其状态,状态文本等

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

1 个答案:

答案 0 :(得分:1)

您的代码是:

if (err instanceof HttpErrorResponse) {
  this.errorControl(req, err.status);
  return Observable.throw(err);
}

但我在任何地方都看不到else

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

在任何情况下,您都应该返回一个Observable,而不仅仅是在适合您的情况下。