RxJS连续HTTP轮询,以防失败

时间:2018-11-22 06:56:41

标签: rxjs

我正在尝试实现HTTP轮询。期望是每5分钟从HTTP轮询一次,或者可以说在Server上同步。万一失败,它不应该停止主题,而是应该重试3次,然后在5分钟后再次尝试。如果同样在5分钟后仍失败,则应重试3分钟,然后场景继续进行。

我尝试的是一些东西。

const checkTimeForRestart$ = Rx.Observable.timer(5 * 60 * 1000, 5000)
    .switchMap(() => Rx.Observable.of(axios.get(url)).retry(3));

// .map(response => console.log(`console here !! - ${response}`));
// .concatMap(val => of(`Delayed by: ${val}ms`).pipe(delay(val)));

checkTimeForRestart$.subscribe(
    x => console.log(x),
    error => console.error(`Error: ${error}`),
    () => console.log(`Complete: fires when the observable completes`)
);

如果服务器未启动或由于连接问题,则不应完成可观察的任务,但应尝试3次,然后在5分钟后重做该过程。

1 个答案:

答案 0 :(得分:0)

所以问题在于,当a重试3次后,错误通知将被发送出去,该通知将处理链,这不是您想要的。

一个简单的解决方案是使用catch(在RxJS 6中为catchError)在3次重试后忽略该错误:

const checkTimeForRestart$ = Rx.Observable.timer(5 * 60 * 1000, 5000)
  .switchMap(() => Rx.Observable.of(axios.get(url))
    .retry(3)
    .catch(err => Rx.Observable.empty())
  );