【发布时间】:2018-10-02 23:51:06
【问题描述】:
我正在使用 RxJava 遍历文件列表,进行网络调用以上传每个文件,然后将成功上传的文件收集到列表中,并在成功时将这些文件保存在订阅者中。
此代码有效,但发生错误时除外。行为应该是它记录错误并继续,它会这样做,除非发生错误,订阅者的 onSuccess lambda 永远不会被调用。
观察者是否期望发射与原始迭代中相同数量的元素?迭代完所有项目后,如何跳过错误并使其完成?除了Single.never() 之外,还有其他东西可以实现不将错误转发到下游吗?
queryFiles()?.let { files ->
Observable.fromIterable(files)
.flatMapSingle { file ->
uploadFile(file)
.onErrorResumeNext { error ->
log(error)
Single.never() // if this is returned onSuccess is never called
}
.map { response ->
file.id = response.id
file
}
}
.toList()
.subscribe( { uploadedFiles ->
persist(uploadedFiles) // if error occurs above, this is never called
}, { error ->
log(error)
})
}
【问题讨论】:
标签: android kotlin rx-java rx-java2