Angular HTTP客户端重试时间无法在调用方上捕获错误

时间:2018-09-12 22:46:12

标签: angular ionic-framework error-handling ionic3 httpclient

我有一个 Ionic 3应用程序,我在其中使用HttpClient,并且有一个 API 调用,它是对 GET 的请求服务器。当第一次尝试失败时,我会打电话给retryWhen,这是发生错误的原因。

问题是我无法捕获呼叫者错误

以下是我的服务代码。

getDriverMeInfo() {
    return this.http.get(`${this.global.baseUrl}/me`)
    .retryWhen(err => err.delay(10000).take(10)) // Delay after 10 seconds when an error occured and retry maximum of 10 takes
    .concat(Observable.throw(new Error('Retry limit exceeded!'))).toPromise()
  }

下面的组件代码是呼叫者

async getDriverInfo() {
    try {
      const meDetails = await this.driverMe.getDriverMeInfo() // Get the profile information of the driver if
      console.log(meDetails)
    } catch (err) { 
      console.log(err) // This wouldn't catch the error on the HttpErrorResponse
    } 
  }

我唯一遇到此错误的是Observable.throw(new Error('Retry limit exceeded!')),但是HttpErrorResponse的实例将为我提供状态代码消息为什么失败无法被捕获。

感谢有人可以帮助您。 预先感谢。

1 个答案:

答案 0 :(得分:3)

  getDriverMeInfo()
  {
    return this._http.get<any>(`${this.global.baseUrl}/me`)
    .retryWhen((err)=>
    {
      return err.scan((retryCount)=>{
        retryCount+=1;
        if(retryCount<6)
        {
          console.log("retrying attemp: "+ retryCount);
          return retryCount
        }
        else
        {
          throw(err)
        }
      },0).delay(10000)
    })
  }

及其组件

this.driverMe.getDriverMeInfo().subscribe(res=>{    
})