网站搜索

javascript - Rxjs 等待前一个间隔请求执行完成后再继续


使用场景: 每3分钟调用一次端点,以更新应用程序中某个服务的状态。

我当前的代码:

interval(180000)
            .subscribe(() => this.doRequest
                .pipe(catchError(() => {
                    this.applicationFlag = false;
                    return EMPTY;
                }))
                .subscribe(result => this.applicationFlag = result));

我目前的问题是,有时上一个间隔请求尚未完成,但下一个间隔请求也在进行请求。

有没有办法标记等待前一个请求完成,或者在前一个请求尚未完成时不执行间隔?

答案#1

当你在一个 subscribe 内部又有另一个 subscribe 时,外部链无法被通知内部链已经完成。你必须重新构建你的链,并使用诸如 concatMap、mergeMap 或 switchMap 等操作符。例如如下所示:

interval(180000)
  .pipe(
    concatMap(() => this.doRequest.pipe(
      catchError(() => {
        this.applicationFlag = false;
        return EMPTY;
      }),
    ),
  )
  .subscribe();