使用RxJava从可观察的调用返回不可观察(Android / Kotlin)

问题描述 投票:0回答:1

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

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

上面的reauthenticate()方法返回一个Observable,需要调用它,并且仅在完成后才返回。否则,它可以立即返回从createMap()获得的值。

两个明显的问题是,我在第一个return语句中获得了“此处不允许返回”,并且由于没有在if语句之外未返回任何内容,所以出现了错误。

是否可以通过不同的方式对此编码进行不同的编码才能正常工作?我尝试了一些发现的建议(即,命名为lambda,内联函数),但似乎无济于事,并且如果可能的话,我很可能会遗漏一些明显的东西。

编辑:此方法是从第三方SDK触发的接口中的回调方法,因此我对实际方法的输入或输出没有灵活性。

我有一个接受布尔输入值的函数,并且在这种情况下,它需要在一种情况下订阅一个Observable,而在另一种情况下需要立即返回。看起来像这样:...

android kotlin lambda rx-java
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.