我正在尝试实现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分钟后重做该过程。
答案 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())
);