如果在后台订阅,为什么retryWhen在处理程序中隐藏错误?

时间:2019-07-17 04:58:47

标签: android kotlin rx-java rx-java2

我得到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不会吞下错误?

0 个答案:

没有答案