Angry http client retryWhen не может отловить ошибку на звонящем - PullRequest
0 голосов
/ 13 сентября 2018

У меня есть Ionic 3 App , где я использую 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 голосов
/ 17 сентября 2018
  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=>{    
})
...