使用 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()
}
我有一个接受布尔输入值的函数,根据这个,它需要在一种情况下订阅 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()
}