dur*_*rao 6 javascript rxjs rxjs5 angular angular5
我想随着时间间隔的增加触发retrywhen(),
socketResponse.retryWhen(attempts => {
return attempts.zip(Observable.range(1, 4)).mergeMap(([error, i]) => {
console.log(`[socket] Wait ${i} seconds, then retry!`);
if (i === 4) {
console.log(`[socket] maxReconnectAttempts ${i} reached!`);
}
return Observable.timer(i * 1000);
});
});
Run Code Online (Sandbox Code Playgroud)
上面的代码工作正常。当前执行输出:
连接错误时(第一次)
连接成功
//成功连接。
连接错误时(第二次)
现在,我想重置套接字连接成功时的等待时间。
期望的输出:
连接错误时(第一次)
连接成功
//成功连接。
连接错误时(第二次)
[socket] 等待1秒钟,然后重试!//等待1秒
[socket] 等待2秒钟,然后重试!//等待2秒
但我不知道如何重设retrywhen()时间间隔。
小智 0
我最近通过使用 retryWhen 处理程序的辅助类解决了这个问题。这是在 RxJava 而不是 RxJS 中,但我认为概念是相同的。就我而言,如果超出了最大重试次数,我想出错,因此您可能需要调整该部分以满足您的需要。
private static class RetryWhenHandler implements Function<Observable<? extends Throwable>, Observable<?>> {
int retryCount = 0;
@Override
public Observable<?> apply(Observable<? extends Throwable> attempts) throws Exception {
if (++retryCount <= MAX_RETRIES) {
return Observable.timer(i, TimeUnit.Seconds);
} else {
return Observable.error(throwable);
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后,在上面的示例中:
RetryWhenHandler myHandler = new RetryWhenHandler();
socketResponse
.doOnNext(ignored -> myHandler.retryCount = 0)
.retryWhen(myHandler);
Run Code Online (Sandbox Code Playgroud)
每当您从可观察到的更新获得更新时,这都应该重置您的 retryCount,以便下次遇到错误时它为 0。
| 归档时间: |
|
| 查看次数: |
633 次 |
| 最近记录: |