我有一个 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的实例将为我提供状态码消息消息为什么失败无法被捕获。

欣赏是否有人可以提供帮助。
提前致谢。

最佳答案

  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=>{
})

10-05 20:46
查看更多