2017-08-10 19 views
0

我有一個List<Observable<?>>,我想通過這些(運行順序)發出的第一個項目,或者從最近觀察到的返回錯誤,如果全部返回錯誤或自定義錯誤如果全部是空的(我可以用.switchIfEmpty(Observable.error(RuntimeException())))從可觀察的名單返回第一發射結果,或者返回錯誤,如果空

目前,我有這樣的事情:

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

該代碼處理只得到第一個發出值,如果所有的觀測是空的,但不要返回一個錯誤處理錯誤案例。我有什麼想法可以解決這個問題?

+0

如果您發佈的解決問題的第一部分的片段,我不知道我理解的問題都沒有 - 因爲沒有'flatMap' /'concatMap'在那裏,我看不出這將發射_items_ - 應該總是發出'listOfObservables.get(0)'...? –

回答

0

此代碼應該做你想要的要求和延遲誤差至死不渝

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

concatMapDelayError將處理順序可觀察什麼,所以如果每個觀察到的是一個錯誤,你會得到CompositeException與聚集所有異常。