我正在用 RxJava 观察数据库表。所有 SQL SELECT 查询都返回一个热 observable,每当我在同一个表中插入/更新/删除行时,我将重新运行任何订阅的 SELECT 查询并调用onNext(queryResult)热查询 observable。
database.select("SELECT * FROM Foo) // returns an observable
.map(doSomething)
.filter(aFilter)
.subscribe (
{
// onNext
},
{
// onError
}
)
Run Code Online (Sandbox Code Playgroud)
这很有效。但是,在一个特殊用例中,我想避免数据库重新发出新项目。是否有某种操作符我可以用来使它成为一个单一的“冷”可观察对象,而不必更改我为热可观察对象构建的所有数据库层,如下所示:
database.select("SELECT * FROM Foo) // returns an observable
.map(doSomething)
.filter(aFilter)
.toColdObservable()
.subscribe (
{
// onNext
},
{
// onError
}
)
Run Code Online (Sandbox Code Playgroud)
我知道“cold observable”这个词不合适,但我还没有找到更好的名字。所以我想要的是数据库不通知 SQL Query Observable 关于更新。所以我对“冷可观察”的意思只是查询数据库一次,之后不再接收更新。