2016-05-05 31 views
6

Sto creando una sequenza osservabile e sono fondamentalmente alla ricerca di un modo piacevole per interrompere la catena se una condizione non viene soddisfatta. Idealmente potremmo attraverso un errore in questo scenario. Questo è fondamentalmente rimuovere un'istruzione if/else in un operatore flatmap. Questo è qualcosa di simile che ho operatori oraRxJava Break Chain on Conditional

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 
         } 
        } 
       }) 

che ho visto come il filtro() e tutti gli altri condizionali, ma non sono sicuro se qualcuno di loro soddisfare le mie esigenze. C'è un modo migliore per farlo? O è quello che sto cercando bene? Grazie!

+0

'return Observable.error (exception)'? – Than

+0

@Than immagino che possa forzare un errore. Sono più alla ricerca di una sorta di metodo che riesco a combinare per rimuovere completamente l'if/else, se esiste. –

+1

Perché non filtrare le condizioni prima di applicare flatMap? – JohnWowUs

risposta

2

Che ne dici di utilizzare takeWhile - docs?

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