我有一个接受布尔输入值的函数,并且依赖于此,它需要在一种情况下订阅一个Observable并在另一种情况下立即返回。看起来像这样:
fun getMap(needsReauth: Boolean): Map<String, Any>? {
if (needsReauth) {
AuthManager.reauthenticate().subscribe {
return createMap()
}
} else {
return createMap()
}
}
上面的reauthenticate()
方法返回一个Observable,它需要被调用并且仅在完成时返回。否则,它可以立即返回从createMap()
获得的值。
两个明显的问题是,我在第一个return语句中获得了“此处不允许返回”,并且由于没有在if语句之外未返回任何内容而出现了错误。
是否可以通过其他方式对此编码进行不同的编码以使其正常工作?我尝试了一些发现的建议(即,命名为lambda,内联函数),但似乎没有任何效果,并且在可能的情况下,我很可能会遗漏一些明显的东西。
编辑:此方法是从第三方SDK触发的接口中的回调方法,因此我对实际方法的输入或输出没有灵活性。
答案 0 :(得分:1)
如果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()
}