从observable列表返回第一个发出的结果,如果为空则返回错误

时间:2017-08-10 18:34:06

标签: java rx-java2

我有一个List<Observable<?>>我希望得到其中任何一个发出的第一个项目(顺序运行)或者从最后一个observable返回错误,如果所有返回错误或自定义错误,如果所有都是空的(我可以做)与.switchIfEmpty(Observable.error(RuntimeException())))

目前,我有这样的事情:

Observable.fromIterable(listOfObservables)
        .take(1)
        .switchIfEmpty(Observable.error(RuntimeException()))

此代码只处理获取第一个发出的值并在所有observable都为空但不处理错误情况时返回错误。我有什么想法可以解决这个问题?

1 个答案:

答案 0 :(得分:0)

此代码应该按您的要求执行

Observable
  .fromIterable(listOfObservables)
  .concatMapDelayError(i -> i)
  .take(1)
  .switchIfEmpty(Observable.error(new RuntimeException()))

concatMapDelayError将按照请求顺序处理observable并将错误延迟到最后,因此如果每个observable都是错误,您将获得CompositeException聚合所有异常。