我有一个函数,它接受布尔输入值,根据这一点,它需要在一种情况下订阅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触发的接口中的回调方法,所以我在实际方法输入或输出方面没有灵活性。
如果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()
}