使用 RxJava 从 Observable 调用返回与非 Observable 调用 (Android/Kotlin)

Returning from Observable call vs non-Observable using RxJava (Android/Kotlin)

我有一个接受布尔输入值的函数,根据这个,它需要在一种情况下订阅 Observable,在另一种情况下立即 return。这是它的样子:

fun getMap(needsReauth: Boolean): Map<String, Any>? {
    if (needsReauth) {
        AuthManager.reauthenticate().subscribe {
            return createMap()
        }
    } else {
        return createMap()
    }
}

上面的 reauthenticate() 方法 return 是一个 Observable,它需要被调用并且只有 return 完成。否则它可以立即 return 它从 createMap().

获得的值

两个明显的问题是我得到了第一个 return 语句的 "return not allowed here",并且我得到了一个错误,因为我没有 return 外面的任何东西if 语句。

是否有不同的编码方式可以使它正常工作?我尝试了一些我发现的建议(即命名 lambda、内联函数),但似乎没有任何效果,而且我可能遗漏了一些明显的东西,假设这是可能的。

编辑:此方法是接口中的回调方法,由第 3 方 SDK 触发,因此我无法灵活处理实际方法输入或输出。

如果 AuthManager.reauthenticate() 返回 Observable 并且您无法重构 getMap(...) 的调用方以接受异步结果,您应该能够调用 io.reactivex.Observable.blockingFirst(),阻塞调用线程直到值可用:

fun getMap(needsReauth: Boolean): Map<String, Any>? {
    if (refreshContext) {
        AuthManager.reauthenticate().blockingFirst() // presumably validate the result?
    }

    return createMap()
}