Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin 自动订阅Rx流中的可观测数据_Kotlin_Rx Java - Fatal编程技术网

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(如果您假设是这样的话)。