RxJava / Kotlin可观察方法调用链-如何终止?

时间:2018-12-08 16:04:25

标签: android kotlin rx-java2 rx-kotlin

我想实现一种方法来编辑便笺,将其保存到本地数据库(缓存),然后将其作为POST请求发送到服务器。我正在学习RxJava,我想从注释中创建Observable,然后对其进行转换,例如将其映射到Entity模型并保存。我的方法返回Completable且此链返回Observable<Completable>的问题。如何从Completable中解开Observable,我只是用来启动RxJava的东西。每个editNote()方法都返回一个Completable

 override fun editNote(note: Note): Completable {
    return Observable.just(note)
        .map { mapper.mapToEntity(it) }
        .map { noteEntity ->
            factory.getCacheDataStore().editNote(noteEntity)
                .andThen { factory.getRemoteDataStore().editNote(noteEntity) }
        }
}

================================================ ========

更新

最后,我设法找到了“解决方案”,但我不确定它是否正确:-)

override fun editNote(note: Note): Completable {
    return Observable.just(note)
        .map { mapper.mapToEntity(it) }
        .flatMapCompletable { noteEntity ->
            factory.getCacheDataStore().editNote(noteEntity)
                .andThen { factory.getRemoteDataStore().editNote(noteEntity) }
        }
}

1 个答案:

答案 0 :(得分:1)

您正在寻找flatMapCompletable而不是map,因为map只是拦截流并将发射映射为另一种类型,而'flatMap'(或其同级)则来自文档:

  

将一个Observable发出的项目转换为Observable,然后将这些项目的排放展平为一个Observable。

您可以在Here上看到它的大理石图