首页 > 解决方案 > 如果在后台订阅,为什么 retryWhen 会隐藏处理程序的错误?

问题描述

我得到了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 上:

在安卓上:

为什么doOnError在后台运行时不处理?

如果不更改调度程序,为什么retryWhen不吞下错误?

标签: androidkotlinrx-javarx-java2

解决方案


推荐阅读