Angular / RxJS轮询,超时和时间间隔取决于api响应时间

问题描述 投票:1回答:1

我正在尝试编写一种方法,该方法将轮询API操作的状态,返回一个可观察到的对象,该对象将发出每个状态调用的结果(因为它包含我要显示的进度信息),直到完成为止状态,发出该状态,然后完成。

到目前为止,我所拥有的是:

pollStatus(identifier: string): Observable<OperationStatusResource> {
    const obs = interval(1000)
      .pipe(
        startWith(0),
        switchMap( () => this.apiService.operationStatus(identifier) ),
        takeWhile( (value, index) => { 
          return value.status != OPERATION_STATUS.COMPLETE;
        }, true)
      )

    return obs;
  }

该方法有效,并且我理解它,但是我认为我可以做得更好,而且我还在努力寻找方法。这每秒请求一个新状态,如果尚未完成,则取消上一个状态。我确实想在每次发送新请求时都取消以前的请求,以确保我永远不会由于互联网的恶作剧而出事,但是:

  • 我希望在上一个请求的响应之后开始应用延迟。因此,像req-> resp-> 1000ms-> req等
  • 我想使每个请求超时。因此,例如,如果某个请求在5秒钟后仍未返回响应,则我将其取消并重试。

如果响应需要花一些时间,但我也很乐意实现耐心的相同想法,但不愿永远等待,如果响应迅速返回,也不会要求太快。

如果我可以添加整体故障条件或超时,例如放弃,如果连续3次超时,或者整个过程耗时超过5分钟,或者如果连续3次返回非200代码,则奖励积分。] >

我正在尝试编写一种方法,该方法将轮询API操作的状态,并返回一个可观察的对象,该对象将发出每个状态调用的结果(因为它包含我会提供的进度信息...

angular rxjs polling
1个回答
0
投票

在睡觉之后,我认为THIS答案加上最后的重试是我应该使用的。

© www.soinside.com 2019 - 2024. All rights reserved.