如何在此特定用例中使用retry?

时间:2018-01-26 08:45:05

标签: javascript angular typescript reactivex

好的,我有这个有趣的用例。我需要在特定条件下重试HTTP调用,其中最后一次调用的状态代码是501.重试应该发生5次。如果失败,只需返回组件中的错误处理程序。 (这是有效的)

我实际上有这个工作,但这是场景。我还需要以不同的方式迎合不同的状态代码。例如,当状态代码为502或503时,我需要一个弹出窗口。这些不同的场景由我需要传递状态代码的函数this.buyPrepaidMobileService.handlebuyPrepaidMobileError处理。但是我不知道如何在组件内部的错误处理程序中检索它。

这是我的代码:

在组件中:

buyPrepaidMobile(data) {
  this.loader.startLoading();
  this.buyPrepaidMobileService.onBuyPrepaidMobile(data).subscribe(
    response => {
      this.buyPrepaidMobileService.handlebuyPrepaidMobileSuccess(response)
        this.activeStep = 3;
        this.progressIndicator.setStep(3);
        this.loader.stopLoading();
    },
    error => {          
      this.loader.startLoading();
      //This is where I need to handle the other status codes
      this.buyPrepaidMobileService.handlebuyPrepaidMobileError(error.header.statuscode)
      this.activeStep = 3;
      this.progressIndicator.setStep(3);
      this.loader.stopLoading();
      console.log('Retried 5 times, ended with failure');
    }
  )
}

在我的服务中:

return this.prepaidPaymentProxyService.performAirtimePrepaidPayment(request)
  .retryWhen(error => {
    return error
      .flatMap((error: any) => {
          if (error.header.statuscode  === '501') {
            console.log(++count);
            return Observable.of(error).delay(1000)
          }
          return Observable.throw(error);
       }).take(5).concat(Observable.throw(error));
    })

现在这是我的问题。在我的组件中,我需要error对象来获取状态代码。然而,通过这样做,我回到了一个主题。而且我不知道如何从中检索状态代码。

任何人都可以通过指出我做错了什么来帮助我吗?如果状态代码不是501,我需要组件中的错误对象,这样我就可以用不同的方式处理不同的状态代码。

感谢任何帮助:)

0 个答案:

没有答案