我试图返回Pair<Boolean, Boolean>
,但无法返回。它总是以Single<Pair<Single<Boolean, Boolean>>>
的形式返回我。因此,我无法在Boolean
值的基础上更新该值,但它在Fragment
中返回为Single<Boolean>
。我以的身份在ViewModel中写作
fun verify(aValue: String): @NonNull Single<Pair<Single<Boolean>, Single<Boolean>>> {
return Single.just(Pair(verifyA(aValue), verifyB(aValue)))
}
在这样的同步函数(不是协程(中获得它作为返回值的唯一方法是阻塞:
fun verify(aValue: String): @NonNull Pair<Boolean, Boolean> {
return Pair(verifyA(aValue).blockingGet(), verifyB(aValue).blockingGet())
}
根据verifyA
和verifyB
函数的作用,这可能会阻塞调用线程一段时间。如果是主线程,您的应用程序将出现卡顿、冻结或应用程序未响应(ANR(错误。
如果你使用Rx,你应该把你的逻辑设计成反应式的,而不是命令式的,以避免这种问题。试图混合和匹配像这样的反应性和声明性逻辑会导致上面这样的问题。
如果你真的想返回一个Single<Pair<Boolean>, Pair<Boolean>>
,这样你就可以保持它的反应性,但又不想打开下游的单个组件,你可以压缩两个来源,如下所示:
fun verify(aValue: String): @NonNull Single<Pair<Boolean, Boolean>> {
return Single.zip(verifyA(aValue), verifyB(aValue)) { a, b -> Pair(a, b) }
}