2017-04-11 3 views
2

Ich versuche, herauszufinden, wie ein Ergebnis aus dem Netz zu bekommen, bleiben sie und stellen die reponse Körper auf die beobachtbare. So:Concat und zurück beobachtbare

@Override 
    public Observable<DefaultUserResponse> createUser(CreateUserCommand command) { 
     return this.userService.createUser(command) 
       .map(defaultUserResponse -> { 
        User user = new User(); 
        defaultUserResponse.setUser(user); 
        return defaultUserResponse; 
       }).flatMap(defaultUserResponse -> persist(defaultUserResponse.getUser())); 
    } 

Observable<User> persist(User user) {return null;} 

Schritte:

  1. bekomme ich einen DefaultUserResponse vom Server.
  2. Den Befehl in einen Benutzer umwandeln (Befehl = DTO)
  3. Den Benutzer lokal beibehalten.
  4. Geben Sie die DefaultUserResponse zurück.

Wie soll ich vorgehen?

Dank

+0

Was persistieren (defaultUserResponse.getUser()) kehrt? –

+0

Sorry, habe vergessen, es hinzuzufügen! – Leonardo

+0

Warum die -1? War ich nicht klar genug? – Leonardo

Antwort

1

Betrachten Completable Typ für Ihre persist-Methode (wenn Sie über den Rückgabewert (e) do not care):

Completable persist(User user) { 
    return Completable.fromCallable(() -> { 
     //persisting 
     return null; 
    } 
} 

Dann könnten Sie andThen Operator zu warten, bis verwenden persistierenden abgeschlossen ist und Ihr Wert drücken weiter:

... 
.flatMap(defaultUserResponse -> persist(defaultUserResponse.getUser()).andThen(Observable.just(defaultUserResponse))); 

Oder wenn Sie noch Observable verwenden für persistierende Verwenden Sie einfach einen anderen flatMap anstelle von andThen.

+0

Es funktioniert nicht, da eine defaultUserResponse innen zurückzukehren versuchen weiterhin nicht erlaubt ist ... – Leonardo

+0

Es ist nicht 'defaultUserResponse' zurückzukehren versuchen ** ** innen Methode bestehen bleiben, es _chains_ persistierenden nur mit der Rückkehr' defaultUserResponse' in 'beobachtbare gewickelt '. –

+0

Ich habe es, das erste Mal war es unklar - ich habe die Antwort mehrmals bearbeitet, bitte überprüfen Sie es noch einmal. –