【问题标题】:Angular 4 - Return HttpErrorResponse from interceptorAngular 4 - 从拦截器返回 HttpErrorResponse
【发布时间】:2018-06-27 06:44:07
【问题描述】:

这在我的拦截器中

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 及其状态、状态文本等。

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

【问题讨论】:

  • 你能发布你的errorControl(req, err.status)函数的内容吗?
  • 你能显示它实际导致错误的代码吗?您如何发现订阅中的错误

标签: angular error-handling observable interceptor


【解决方案1】:

你的代码是这样的:

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

但我在任何地方都没有看到else

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

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

【讨论】:

  • 所以你告诉我无论如何都要抛出错误?无论如何,这并不能完全解决我的问题,例如,在 400 状态代码错误的情况下,我仍然收到上面的消息而不是 HttpErrorResponse
  • 好吧,这就是拦截器的工作原理......无论如何,您都应该通过错误(或成功!),而在您的情况下,您没有。如果您在所有情况下都返回错误,您将不会收到undefined 错误,我对此非常确定。
  • 我现在在条件之外返回错误,如果它被捕获,无论它的类型是什么,它都应该发送它,但我仍然得到未定义的东西。我有很多拦截器,这是最后一个拦截器,即使我在最后一个拦截器中捕获了 HttpErrorResponse,我的问题是否会因此而引起?
  • 如果您在其他拦截器中做了同样的事情,那么您的问题不在于这个...您需要每次返回错误,而不仅仅是在它发生时适合你。
  • 啊哈,我不需要你的支持,但我知道你的问题,让我去那里
猜你喜欢
  • 2017-11-07
  • 2018-05-19
  • 2020-03-14
  • 2018-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-21
相关资源
最近更新 更多