RxJava 的 retryWhen 运算符
RxJava's retryWhen operator
我试图深入了解 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")
}
)
结果如下所示。
Debug: retryWhen proceed...
Debug: error : There is a exception
问题是什么时候retryWhen运算符被触发?
我假设只有在发生异常时才会触发 retryWhen 运算符。
但是结果显然不是我想的那样,
对此有什么想法吗?谢谢!
retryWhen { errors -> ... }
取一个 Observable<Throwable>
并且应该 return 一个 Observable
那 return 任何东西 重试 或停止重试 的错误。
一个例子可以是:
.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)
此代码将延迟每次重试。
顺便说一下,抛出异常不是这个方法要做的事情。
文档:
* Great blog article 解释了 retryWhen
我试图深入了解 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")
}
)
结果如下所示。
Debug: retryWhen proceed...
Debug: error : There is a exception
问题是什么时候retryWhen运算符被触发?
我假设只有在发生异常时才会触发 retryWhen 运算符。
但是结果显然不是我想的那样,
对此有什么想法吗?谢谢!
retryWhen { errors -> ... }
取一个 Observable<Throwable>
并且应该 return 一个 Observable
那 return 任何东西 重试 或停止重试 的错误。
一个例子可以是:
.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)
此代码将延迟每次重试。
顺便说一下,抛出异常不是这个方法要做的事情。
文档:
* Great blog article 解释了 retryWhen