Kotlin 自动订阅Rx流中的可观测数据
我有以下代码:Kotlin 自动订阅Rx流中的可观测数据,kotlin,rx-java,Kotlin,Rx Java,我有以下代码: Completable.fromCallable { messagesBO.deleteAllGroupsForMessage(messageId) } .andThen { Completable.fromAction { messagesBO.storeMessageGroups(messageToGroups) }.subscribe() } .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedu
Completable.fromCallable { messagesBO.deleteAllGroupsForMessage(messageId) }
.andThen { Completable.fromAction { messagesBO.storeMessageGroups(messageToGroups) }.subscribe() }
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(
{
},
{ error -> }
))
我有第二个完全表:
Completable.fromAction
我需要订阅它才能运行fromAction中的函数。但这似乎不是一种干净的方法
我不一定需要使用Completable,因为我不会在onComplete中返回任何内容。是否有其他方法调用函数并自动订阅?事实上,我可以有多个和,并希望将它们链接在一起
更新:
这里有一个解决方案,尽管我不认为它是最好的:
Observable.fromCallable { messagesBO.deleteAllGroupsForMessage(messageId) }
.flatMapCompletable { Completable.fromAction { messagesBO.storeMessageGroups(messageToGroups) } }
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(
{
},
{ error -> }
))
事实证明这比我想象的要简单。仅使用map将自动运行代码,而无需创建可观察的:
Observable.fromCallable { messagesBO.deleteAllGroupsForMessage(messageId) }
.map { messagesBO.storeMessageGroups(messageToGroups) }
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(
{
},
{ error -> }
)
删除嵌套的Completable上的.subscribe(),您不需要它。整个rx链只需要1个subscribe(),我不一定需要使用Completable,因为我不返回任何东西,这正是您使用Completable@TimCastelijns我删除了它,但是fromAction中的代码永远不会执行。它将仅在添加订阅时执行。注意:storeMessageGroups函数不会返回Completable(如果您假设是这样的话)。