android - RxJava/Kotlin Observable 方法调用链 - 如何终止?
问题描述
我想实现编辑笔记的方法,将其保存到本地数据库(缓存),然后将其作为 POST 请求发送到服务器。我正在学习 RxJava,我想Observable
从注释中创建,然后对其应用转换,例如将其映射到实体模型并保存。我的方法返回 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) }
}
}
解决方案
您正在寻找flatMapCompletable
而不是map
,因为map
只是截取流并将排放映射到另一种类型,而来自文档的“flatMap”(或它的兄弟姐妹):
将 Observable 发射的项目转换为 Observable,然后将这些项目的发射扁平化为单个 Observable。
你可以在这里看到它的大理石图
推荐阅读
- node.js - Telegram webhook 有什么用?
- ruby-on-rails - 使用额外的密钥而不是电子邮件/密码对用户进行身份验证是个好主意吗?(API/智威汤逊)
- java - 我将如何表示这个数据库关系?
- python - 在转换期间从 tensorflow 对象中提取 numpy 值
- google-cloud-platform - 使用 Dataproc 在 Zeppelin 上加载插件 GitHubNotebookRepo 和 GCSNotebookRepo 的问题
- html - 最小化页面时,表格中的 html 元素开始离开它所在的卡片
- css - 引导样式未以角度 10 加载
- vuetify.js - 如何配置 v-list-item 宽度以避免省略号
- javascript - 如何使用 javascript 在 Webform 中上传文件以访问全局 PHP 变量 $_FILES
- html - 如何在文本块下方的 2 个图像之间添加空格?