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

之后,该参数为null或不为null,则返回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)
    }
}

07-25 23:39
查看更多