Android 如何在平面图中使用等待方法?

Android 如何在平面图中使用等待方法?,android,kotlin,rx-java,kotlinx.coroutines,rx-kotlin2,Android,Kotlin,Rx Java,Kotlinx.coroutines,Rx Kotlin2,我的问题是这个。我有下一个密码 Observable.fromIterable(this) .flatMap { project -> val date = async(CommonPool) { App.db.projectResponseDao().getLastUpdate(project.uid.toString()) }

我的问题是这个。我有下一个密码

Observable.fromIterable(this)
            .flatMap { project ->
                val date = async(CommonPool) {
                    App.db.projectResponseDao().getLastUpdate(project.uid.toString())
                }
                val query = ProjectQuery.builder().id(project.uid.toString()).date(date.await()).build()
                val baseGraphQlUrl = context.getString(R.string.base_graphql_url)
                val apolloCall: ApolloCall<ProjectQuery.Data> = ApiClient.getApolloClient(context.getSessionToken(), baseGraphQlUrl).query(query)
                val remoteObservable: Observable<Pair<Project, Response<ProjectQuery.Data>>> = Observable.combineLatest(
                        Observable.just(project),
                        Rx2Apollo.from(apolloCall),
                        BiFunction { localProject, response -> Pair(localProject, response) })
                remoteObservable
            }
Observable.fromIterable(此)
.flatMap{project->
val日期=异步(公共池){
App.db.projectResponseDao().getLastUpdate(project.uid.toString())
}
val query=ProjectQuery.builder().id(project.uid.toString()).date(date.await()).build()
val baseGraphQlUrl=context.getString(R.string.base_graphql_url)
val apolloCall:apolloCall=ApiClient.getApolloClient(context.getSessionToken(),baseGraphQlUrl).query(查询)
val remoteObservable:Observable=Observable.CombineTest(
可观察到。只是(项目),
RX2阿波罗号从(阿波罗号呼叫),
双功能{localProject,response->Pair(localProject,response)})
可远程观测
}

所以,在我的android应用程序中,我从房间的桌子上得到了一个日期。我使用的是异步方法,因为房间查询需要在与UI不同的线程中完成。因此,根据结果,我想构建一个到远程数据库的新查询。问题是我想确保在创建查询时日期已经初始化。考虑到这一点,我使用wait方法,但给出了一个错误。它说我不能在无挂起函数中调用wait函数。那么,你能想出一个办法来解决这个问题吗?或者如何修复它?谢谢你

如果你只是想让你的房间取消主线程,你可以通过在上面发布的代码末尾添加
.subscribeOn(Schedulers.IO())
让你的
flatMap
代码在IO线程上运行。这样就不需要在
flatMap
中移动线程

Observable.fromIterable(this)
      .flatMap { project->
      val date = App.db.projectResponseDao().getLastUpdate(project.uid.toString())
      val query = ProjectQuery.builder().id(project.uid.toString()).date(date).build()
      val baseGraphQlUrl = context.getString(R.string.base_graphql_url)
      val apolloCall: ApolloCall<ProjectQuery.Data> = ApiClient.getApolloClient(context.getSessionToken(), baseGraphQlUrl).query(query)
      val remoteObservable: Observable<Pair<Project, Response<ProjectQuery.Data>>> = Observable.combineLatest(
                        Observable.just(project),
                        Rx2Apollo.from(apolloCall),
                        BiFunction { localProject, response -> Pair(localProject, response) })
      remoteObservable
      }
      .subscribeOn(Schedulers.io())
Observable.fromIterable(此)
.flatMap{project->
val date=App.db.projectResponseDao().getLastUpdate(project.uid.toString())
val query=ProjectQuery.builder().id(project.uid.toString()).date(date.build())
val baseGraphQlUrl=context.getString(R.string.base_graphql_url)
val apolloCall:apolloCall=ApiClient.getApolloClient(context.getSessionToken(),baseGraphQlUrl).query(查询)
val remoteObservable:Observable=Observable.CombineTest(
可观察到。只是(项目),
RX2阿波罗号从(阿波罗号呼叫),
双功能{localProject,response->Pair(localProject,response)})
可远程观测
}
.subscribeOn(Schedulers.io())

Ohhh当然,你是对的。我要测试一下,把你的观点整理一下:D。一个小问题。想象一下,这张平面图不是来自一个可观察的物体。让我们假设一个来自kotlin的法线贴图。在这种情况下,你如何存档我试图做的事情?如何使用await()实现这一点?代码需要位于suspendable函数中(用
suspend
注释),或者位于
launch
async
块中。