【发布时间】:2016-10-31 17:59:15
【问题描述】:
我对 RxJava 并不完全陌生,但我被看似简单的任务所困。
我有一个公开反应式 API 的数据源,我要做的就是获取一些数据,返回它并在没有其他要发出的内容时自动关闭连接。
这是我的代码:
public Observable<Object> execute(String query) {
Single<RxConnection> rxConnection = getRxDB().getConnection();
return rxConnection.flatMapObservable(conn -> {
Observable<Object> rxResult = conn.query(query);
return rxResult.doOnCompleted(() -> {
conn.close(); // THIS DOES NOT WORK. I would like to close the connection and to wait without blocking.
});
});
}
conn.query() 和 conn.close() 在不同的 Scheduler 中异步执行。 此代码不起作用,因为 conn.close() 返回一个没有订阅者的 Completable。另外,如果我在 doOnCompleted 方法本身中手动订阅,则 rxResult Observable 会在不等待连接关闭的情况下完成。
我希望“执行(字符串查询)”方法返回一个 Observable: - 发出 conn.query() 调用获取的所有项目 - 当没有更多的项目要发射时,它会触发 conn.close() - 仅在 conn.close() Completable 之后完成;
谢谢。
【问题讨论】: