首页 > 解决方案 > RxJava/Kotlin Observable 方法调用链 - 如何终止?

问题描述

我想实现编辑笔记的方法,将其保存到本地数据库(缓存),然后将其作为 POST 请求发送到服务器。我正在学习 RxJava,我想Observable从注释中创建,然后对其应用转换,例如将其映射到实体模型并保存。我的方法返回 Completable 并且此链返回的问题Observable<Completable>。如何从中解开CompletableObservable仅用于启动 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) }
        }
}

标签: androidkotlinrx-java2rx-kotlin

解决方案


您正在寻找flatMapCompletable而不是map,因为map只是截取流并将排放映射到另一种类型,而来自文档的“flatMap”(或它的兄弟姐妹):

将 Observable 发射的项目转换为 Observable,然后将这些项目的发射扁平化为单个 Observable。

你可以在这里看到它的大理石图


推荐阅读