如何让这段用 RxKotlin 编写的代码块更干净,避免阻塞线程?

How to make this block of code written with RxKotlin cleaner and avoid blocking thread?

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

在该参数是否为 null 之后,它 returns 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()来避免阻塞线程

像这样的东西应该可以工作:

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