自动订阅Rx流中的可观察对象

时间:2019-07-12 08:01:41

标签: kotlin rx-java

我有以下代码:

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中返回任何内容。还有其他方法可以调用函数并使其自动订阅吗?我实际上可以有多个andThen,并希望将它们链接在一起。

更新:

这是一种解决方案,尽管我不认为这是最好的:

Observable.fromCallable { messagesBO.deleteAllGroupsForMessage(messageId) }
    .flatMapCompletable { Completable.fromAction { messagesBO.storeMessageGroups(messageToGroups) } }
    .subscribeOn(Schedulers.io())
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe(
        {
        },
        { error -> }
    ))

1 个答案:

答案 0 :(得分:0)

事实证明,它比我想象的要简单。仅使用map即可自动运行代码,而无需创建可观察的代码:

Observable.fromCallable { messagesBO.deleteAllGroupsForMessage(messageId) }
    .map { messagesBO.storeMessageGroups(messageToGroups) }
    .subscribeOn(Schedulers.io())
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe(
        {

        },
        { error ->  }
    )
相关问题