Rx js дождаться выполнения запроса предыдущего интервала перед продолжением - PullRequest
0 голосов
/ 16 июня 2020

Вариант использования: вызывать конечную точку каждые 3 минуты, чтобы обновить статус определенной службы в приложении.

мой текущий код:

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

Моя текущая проблема заключается в том, что иногда предыдущий интервальный запрос еще не был выполнен, но следующий интервальный запрос также выполнял запрос.

Есть ли способ пометить ожидание предыдущего или не выполнять интервал, когда предыдущий запрос еще не завершен?

1 Ответ

0 голосов
/ 16 июня 2020

Когда у вас есть один subscribe внутри другого subscribe, внешняя цепочка не может быть уведомлена о завершении внутренней цепочки. Вам необходимо реструктурировать свою цепочку и использовать такие операторы, как concatMap, mergeMap или switchMap. Например, как следующее:

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

...