android - RxJava 的 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")
}
)
结果如下所示。
调试:重试当继续...
调试:错误:有异常
问题是当 retryWhen 操作符被触发时?
我假设只有在发生异常时才会触发 retryWhen 运算符。
但结果显然不是我想的那样,
对此有什么想法吗?谢谢!
解决方案
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
推荐阅读
- javascript - Switch 语句中的条件
- javascript - 如何在角度 9 中使用 lodash 在表格中显示数据
- javascript - 如何在状态中进行搜索(反应)
- python-3.x - 什么是 Python3 库替换“从 scikits.audiolab 导入格式,Sndfile”
- python - 获得连续模型作为两个自变量超出其定义范围的函数
- javascript - 使用 Node 更新(写入)单独 JS 文件中的对象
- javascript - 编辑 React 组件的 CSS
- google-chrome-extension - 浏览器扩展的 browser_action 脚本可以将数据保存到用户指定的文件吗?
- nuxt.js - 将 jquery 和 bootstrap 导入到 nuxtjs
- java - JNAerator 使用 __stdcall 返回值生成方法