代码之家  ›  专栏  ›  技术社区  ›  Yahya Uddin

角度:捕捉连接超时并且没有internet连接HTTP错误

  •  -1
  • Yahya Uddin  · 技术社区  · 5 年前

    我正在尝试使用较新的Angular的HTTP客户端为HTTP请求添加错误处理: https://angular.io/guide/http

    在文档中,说明错误处理如下:

    return this.http.get('https://api.example.com/foo')
        .pipe(
          catchError(this.handleError)
        );
    
    private handleError(error: HttpErrorResponse) {
      if (error.error instanceof ErrorEvent) {
        // A client-side or network error occurred. Handle it accordingly.
        console.log('Client side error:', error.error)
        // TODO: how do I catch specific client side errors?
      } else {
        console.log('Back-end error:', error.error)
      }
      // return an observable with a user-facing error message
      return throwError('Something bad happened; please try again later.');
    };
    

    处理后端错误非常简单。但是,我希望能够捕获特定的客户端错误,例如:

    • 连接超时( net::ERR_CONNECTION_TIMED_OUT
    • 没有internet连接

    更新 事实上我从来没能 error.error ErrorEvent . 通常,当internet连接断开或连接到无效域时,它将返回一个 ProgressEvent .

    0 回复  |  直到 5 年前
        1
  •  1
  •   Eden Ilan    4 年前

    事实上我从来没能错误。错误返回错误事件。通常,当internet连接断开或连接到无效域时,它将返回ProgressEvent。

    你说得对,好像是 bug in the Angular docs ProgressEvent .

    根据XMLHttpRequest,“connectiontimeout”和“nointernetconnection”都应该返回0的状态 spec (任何“网络错误”,即客户端的某些连接问题)。

    所以你的情况应该是:

    private handleError(error: HttpErrorResponse) {
      if (error.status === 0 && error.error instanceof ProgressEvent) {
        // A client-side or network error occurred. Handle it accordingly.
        console.log('Client side error:', error.error)
      }
      ...
    };