我想为网络调用创建一种指数退避。但是,我的网络调用应该重复几次(延迟增加),而不是通常的退避间隔,然后完成 - 无论网络调用的结果是什么。
例如,默认情况应如下所示:
→ wait 1s → network call → onNext(result)
→ wait 3s → network call → onNext(result)
→ wait 10s → network call → onNext(result)
→ onCompleted
当一些网络调用有错误时,这些错误应该被记录下来,而不是中止任务本身。假设第二个网络调用有错误,那么它应该如下所示:
→ wait 1s → network call → onNext(result)
→ wait 3s → network call error → log error
→ wait 10s → network call → onNext(result)
→ onCompleted
当所有调用都有错误时:
→ wait 1s → network call error → log error
→ wait 3s → network call error → log error
→ wait 10s → network call error → log error
→ onCompleted
我已经有一个 Observable 可以调用代码如下所示的网络:
public Observable<Stuff> loadStuff() {
Request request = new Request.Builder()
.url("http://example.com/stuff").build();
return myCall(request, Stuff.class);
}
public <T> Observable<T> myCall(Request request, Class<T> resultClass) {
// calls OkHttp3 and parses the result
return okhttp(request)
.flatMap(parseResponse(resultClass));
}
如何重复使用 Observable fromloadStuff()
来实现我想要的退避间隔?