Angular 在HTTP服务中实现设置间隔

Angular 在HTTP服务中实现设置间隔,angular,Angular,我已经实现了angular setinterval方法,用于每2秒触发一次http服务(getDeviceMobileNumber)。但我只想在状态代码为400时再次触发(最多3次)HTTP服务 但是当前的实现(setinterval)没有等待响应并调用服务3次 是否有解决方案在收到响应后进行HTTP服务调用? this.counter= 0; public getMobileNumberCall() { this.timer = setInterval(() =>

我已经实现了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);
      }

在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))

我也有同样的需要,我用一个简单的方法解决了它。也许这会帮助你找到解决办法