RxJava/Kotlin Observable 方法调用链 - 如何终止?
RxJava/Kotlin Observable method call chain - how to terminate?
我想实现编辑笔记的方法,将其保存到本地数据库(缓存),然后将其作为 POST 请求发送到服务器。我正在学习 RxJava,我想从笔记创建 Observable
,然后对其应用转换,比如将其映射到实体模型并保存。我的方法 returns Completable 和这个链 returns Observable<Completable>
的问题。如何从这个 Observable
中解包 Completable
,我只用它来启动 RxJava 的东西。每个 editNote()
方法 returns 一个 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) }
}
}
============================================= ==========
更新
最后,我找到了 "a solution",但我不确定它是否正确:-)
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'(或者它是兄弟姐妹),来自文档:
Transform the items emitted by an Observable into Observables, then flatten the emissions from those into a single Observable.
你可以在Here
中看到它的弹珠图
我想实现编辑笔记的方法,将其保存到本地数据库(缓存),然后将其作为 POST 请求发送到服务器。我正在学习 RxJava,我想从笔记创建 Observable
,然后对其应用转换,比如将其映射到实体模型并保存。我的方法 returns Completable 和这个链 returns Observable<Completable>
的问题。如何从这个 Observable
中解包 Completable
,我只用它来启动 RxJava 的东西。每个 editNote()
方法 returns 一个 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) }
}
}
============================================= ==========
更新
最后,我找到了 "a solution",但我不确定它是否正确:-)
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'(或者它是兄弟姐妹),来自文档:
Transform the items emitted by an Observable into Observables, then flatten the emissions from those into a single Observable.
你可以在Here
中看到它的弹珠图