我得到retryWhen
的用法,如果服务器出错,则需要执行一些请求。这样的合成代码可以简化此操作:
fun main(args: Array<String>) {
Single.error<Int>(Exception("Source"))
.retryWhen {
it.flatMapSingle {
Single
.error<Unit>(Exception("Handler"))
.subscribeOn(Schedulers.computation())
//.observeOn(AndroidSchedulers.mainThread())
.doOnError { handlerError -> handlerError.printStackTrace() }
}
}
.subscribe({ println("success") },
{
println("source error")
it.printStackTrace()
})
}
这里的源产生错误,然后在处理程序的请求完成后,应使用retryWhen
重新订阅。
但是处理程序发生错误!然后retryWhen
被设计为不抛出源代码链并以“不重试”的方式处理错误状态。但是,无论retryWhen
处理程序预期在doOnError
中输出,什么都没有,处理程序错误被隐藏。
在Java上:
subscribeOn
。doOnError
。在Android上:
subscribeOn
。为什么在后台运行时doOnError
没有得到处理?
如果不更改调度程序,为什么retryWhen
不会吞下错误?