2016-05-05 25 views
6

Gözlemlenebilir bir dizi oluşturuyorum ve temel olarak bir koşul karşılanmazsa zinciri kırmanın güzel bir yolunu arıyorum. İdeal olarak bu senaryodaki bir hatadan geçebiliriz. Bu, bir flatmap operatöründe if/else ifadesini kaldırmaktır. Ben filtresi gibi şimdiRxJava Mola Zinciri Koşullu olarak

flatMap(new Func1<User, Observable<Response>>() { 
        @Override 
        public Observable<Response> call(Result result) { 
         if(isValid(result))) { 
          return api.getObservableResponse(); //some retrofit observable 
         } else { 
          observer.onError(); 
          return null; //??? I guess this would force an error 
         } 
        } 
       }) 

gördüğüm operatörleri() ve diğer tüm koşullu olanları var ama bunlardan herhangi benim gereksinimlerini karşılamak olmadığından emin değilim gibi bu bir şeydir. Bunu yapmanın daha iyi bir yolu var mı? Ya da iyi baktığım şey mi? Teşekkürler!

+0

'dönüş Observable.error (exception)'? – Than

+0

@Than Sanırım bu bir hatayı zorlar. Varsa, eğer/tamamen tamamen kaldırmak için zincirleme yapabileceğim bir çeşit yöntemi arıyorum. –

+1

Neden flatMap'i uygulamadan önce durumunuzu filtrelemeyin? – JohnWowUs

cevap

2

takeWhile - docs nasıl kullanılır?

Observable<T> whatever = ... 

Observable<T> untilConditionMet = whatever 
    .takeWhile(this::isValid) // modify according wherever isValid comes from 
    .flatMap(r -> api.getObservableResponse()); // only doing this until isValid