在Angular HTTP服务中实现set Interval

时间:2019-04-09 10:24:18

标签: angular

我已经实现了角度setinterval方法,用于每2秒触发一次http服务(getDeviceMobileNumber)。但是我只想在状态码为400时再次触发(最多3次)HTTP服务。

但是当前的实现(setinterval)没有等待响应并调用服务3次。

有什么解决方案可以在收到响应后进行HTTP服务调用?

this.counter= 0;
    public getMobileNumberCall() {
        this.timer = setInterval(() => {
          this.counter++;
          if (this.counter === 4) {
            clearInterval(this.timer);
          }  else {
              this.commonServices.getDeviceMobileNumber().then((data: any) => {
                clearInterval(this.timer);
              }).catch((err: any) => {
                  //400 error 
              })
          }
        }, 2000);
      }

1 个答案:

答案 0 :(得分:2)

在http.get管道中使用retryWhen。

function http_retry(maxRetry: number = 3, delayMs: number = 2000) {
  return (src: Observable) => src.pipe(
    retryWhen(_ => {
      return interval(delayMs).pipe(
        flatMap(count => count == maxRetry ? throwError("Giving up") : of(count))
      )
    })
  )
}

this.http.get("/api")
  .pipe(http_retry())
  .subscribe(result => console.log(result))