我有一个接受布尔输入值的函数,并且在这种情况下,它需要在一种情况下订阅一个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,而在另一种情况下需要立即返回。看起来像这样:...
如果AuthManager.reauthenticate()
返回Observable
,并且您不能重构getMap(...)
的调用方以接受异步结果,则您应该能够调用io.reactivex.Observable.blockingFirst()
,阻塞调用线程,直到该值可用为止。