onErrorResumeNext类型推断失败

时间:2019-07-22 20:26:00

标签: rx-java2

如果由于网络异常而导致我的单个错误,则返回Single.just(false)

如果我的单次错误是由于其他原因,请返回Single.error

如果我的单身成功,则返回原始的Single值。

这应该很容易

getStudent(studentId)
    .onErrorResumeNext { if (it is NetworkException) return @onErrorResumeNext Single.just(true)
     return Single.error(it) }

类型推断失败。预期的类型不匹配SingleSource已找到Single

1 个答案:

答案 0 :(得分:0)

您的Single需要返回与源相同的类型(我假设getStudent()不返回布尔值)。如果要表示“成功”和“错误”状态,则Kotlin专门为此提供了Result类。

例如

getStudent()
    .map { student ->
        // Your logic here may look different
        Result.success(student)
    }
    .onErrorResumeNext { error ->
        if (error is NetworkException){
            Single.just(Result.failure(error))
        } else {
            Single.error(error)
        }
    }

这将捕获网络错误并将异常包装在Result中,所有其他异常将传播到下游。然后,您可以在subscribe方法中选择如何处理错误。

但是,根据您的用例,您可能还希望使用Mayberetry()运算符。