RxJS / Angular-轮询json端点,直到响应有效或达到限制

时间:2018-07-11 18:12:37

标签: angularjs typescript rxjs

我正在尝试轮询返回JSON的端点,直到其中一个:

  1. 已尝试重试的最大次数,或者
  2. JSON响应中的某个字段具有预期值。

JSON可能如下所示:

{
    "job": "some-job-id"
    "completed": false
}

我想做的是这样的:

  • 在端点上获取并读取响应,尝试次数增加1
  • 如果completedtrue,请返回JSON
  • 否则:
    • 如果attempts <我们的最大值,请等待几秒钟,然后重试
    • 否则将引发错误(可能会在subscribe中捕获)

我认为将retryWhen / delaytimer组合使用是可行的,但是到目前为止,我尝试过的一切似乎都一次发送了多个查询。

import { of, throwError } from 'rxjs/index';

const http: HttpClient; // Angular's http client

http.get<{ job: string, completed: boolean }>(`http://example.com/jobs/${id}/`).pipe(
      retryWhen(err => err.pipe(
        flatMap(status => status.completed ? of(status) : throwError(`not yet completed`)),
        delay(5000),
      )),
    );

```

谢谢!

0 个答案:

没有答案