如何在 flatMap 中使用 await 方法?
How to use await method inside a flatMap?
我的问题是这样的。我有下一个代码
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
}
因此,我在我的 android 应用程序中从 table 房间获取约会对象。我正在使用异步方法,因为房间查询需要在与 UI 不同的线程中完成。因此,结果是,我想为远程数据库构建一个新查询。问题是我想确保在我创建查询时该日期已经初始化。考虑到这一点,我使用 await 方法,但出现了一个错误。它说我不能在无挂起函数中调用 await 函数。那么,你能想办法解决这个问题吗?或者如何解决?谢谢
如果您只想让 Rooms 调用主线程,您可以通过将 .subscribeOn(Schedulers.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(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
}
因此,我在我的 android 应用程序中从 table 房间获取约会对象。我正在使用异步方法,因为房间查询需要在与 UI 不同的线程中完成。因此,结果是,我想为远程数据库构建一个新查询。问题是我想确保在我创建查询时该日期已经初始化。考虑到这一点,我使用 await 方法,但出现了一个错误。它说我不能在无挂起函数中调用 await 函数。那么,你能想办法解决这个问题吗?或者如何解决?谢谢
如果您只想让 Rooms 调用主线程,您可以通过将 .subscribeOn(Schedulers.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())