我有一个Observable列表,我想知道它们何时完成。特别是我想知道它们是否都成功完成或者其中任何一个都有错误。列表中的所有可观察项应在成功或错误通知执行之前完成。我不需要有关这些通知中的结果或错误的任何信息。
我尝试了Observable.merge(列表),但它在第一个错误时停止了。
期望的例子
Observable.all(listOfObservables)
.onSuccess(() -> {}) // only called if all completed successfully
.onError(() -> {}) // only called after all completed and at least one errored
.onComplete(() -> {}; // called after all completed regardless of success or error
这似乎是一种标准行为;其他'异步承诺'像框架支持这一点。 JavaRx是否支持此行为?实现这一目标的最佳方法是什么?
答案 0 :(得分:3)
我认为你需要mergeDelayError
。它合并了多个Observable,与merge
相同,但它的JavaDoc说 - 将 N Observable平展为一个Observable,允许Observer从所有的Observable接收所有成功发出的项目。源Observable不会被其中一个的错误通知中断。
因此,源Observables的错误排放不会终止产品Observable。所以:
Observable.mergeDelayError(listOfObservables)
.subscribe(
(v) -> {}, // for every successfull item
(e) -> {}, // after all completed and at least one errored
() -> {} // after all completed, won't be called on error though
);