【发布时间】:2015-12-01 21:45:30
【问题描述】:
我正在使用 RxJava 观察数据库表。所有 SQL SELECT 查询都返回一个热的 observable,每当我在同一个表中插入/更新/删除行时,我都会重新运行任何订阅的 SELECT 查询并在热查询 observable 上调用 onNext(queryResult)。
database.select("SELECT * FROM Foo) // returns an observable
.map(doSomething)
.filter(aFilter)
.subscribe (
{
// onNext
},
{
// onError
}
)
这很好用。但是,在一个特殊用例中,我想避免数据库重新发出一个新项目。是否有某种运算符可以用来使其成为单个“冷”可观察对象,而无需更改为像这样的热可观察对象构建的所有数据库层:
database.select("SELECT * FROM Foo) // returns an observable
.map(doSomething)
.filter(aFilter)
.toColdObservable()
.subscribe (
{
// onNext
},
{
// onError
}
)
我知道“cold observable”这个词不合适,但我还没有找到更好的名字。所以我想要的是数据库不通知 SQL Query Observable 更新。所以我所说的“cold observable”只是查询数据库一次,之后不再接收更新。
【问题讨论】:
-
根据您的描述,我想知道
select()可能是如何工作的:返回一些BehaviourSubject或PublishSubject,同时安排对数据库的异步查询,同时确保此查询获胜'在当前客户端实际订阅之前不开始将项目推送到主题中?
标签: rx-java