首页 > 解决方案 > 如何让 RxKotlin 编写的这段代码更干净,避免阻塞线程?

问题描述

我有这个函数,它获取一个参数并首先检查它的值。如果它为 null,则从返回 Single<String> 的 fisrtFun() 的结果中获取其值。

之后,无论该参数是否为空,它都会返回 secondFun() 的结果,该结果将该参数作为输入

fun getUserEvents(id: String?): Single<String> {
    return if (userId == null) {
        firstFun().flatMap { id->
            secondFun(id)
        }
    } else {
        secondFun(id)
    }
}

但正如你所见,我使用了 if-else 块并多次编写了 secondFun()

所以我试着让它更干净

fun getUserEvents(id: String?): Single<String> {
    val id = userId ?: fisrtFun().blockingGet()!!
    return secondFun(id)
}

我想知道是否有更好的方法来实现这个功能而不使用blockingGet()来避免阻塞线程

标签: androidkotlinreactive-programmingrx-kotlin

解决方案


像这样的东西应该工作:

fun getUserEvents(id: String?): Single<String> {
    val idSingle = if (userId == null) firstFun() else Single.just(id)
    return idSingle.flatMap { id ->
        secondFun(id)
    }
}

推荐阅读