RxJava's retryWhen 运算符



我正在尝试深入了解重试当运算符,我有一些代码如下。

Flowable.just(1, 2, 3, 4, 5)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.retryWhen { throwable ->
Log.d("Debug", "retryWhen proceed...")
throw Exception("There is a exception")
}
.subscribe(
{ item ->
Log.d("Debug", "success : $item")
},
{ throwable ->
Log.d("Debug", "error : ${throwable.message}")
},
{
Log.d("Debug", "complete")
}
)

结果如下。

调试:重试时继续...

调试:错误:存在异常

问题是当重试时触发运算符?

我假设重试只有在发生异常时才会触发运算符。

但结果显然不是我想的那样,

对此有什么想法吗?谢谢!

retryWhen { errors -> ... }采用Observable<Throwable>,并应返回一个Observable,该返回任何内容以进行重试或返回错误以进行停止重试。

一个例子可能是:

.retryWhen(attempts -> {
return attempts.zipWith(Observable.range(1, 3), (n, i) -> i).flatMap(i -> {
System.out.println("delay retry by " + i + " second(s)");
return Observable.timer(i, TimeUnit.SECONDS);
});
})

(取自 http://reactivex.io/documentation/operators/retry.html)
此代码将延迟每次重试。

顺便说一下,在此方法中,抛出异常不是要做的事情。

文档:
* 解释retryWhen的精彩博客文章

相关内容

  • 没有找到相关文章

最新更新