2017-04-11 27 views
2

私はネットワークから結果を取得し、それを保持し、Observableに返信本体を返す方法を理解しようとしています。このよう :concatとreturn Observable

@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;} 

ステップ:

  1. 私は、サーバーからDefaultUserResponseを取得します。
  2. コマンドをユーザーに変換する(コマンド= DTO)
  3. ユーザーをローカルに維持します。
  4. DefaultUserResponseを返します。

どうすればよいですか?

おかげ

+0

persist(defaultUserResponse.getUser())は何を返しますか? –

+0

申し訳ありません、それを忘れてしまった! – Leonardo

+0

なぜ-1?私は十分に明確ではなかったのですか? – Leonardo

答えて

1

があなたの方法(あなたが返される値(複数可)を気にしない場合)存続のためのCompletableタイプ使用することを検討してください:

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

を次にあなたが永続化するまで待つようにandThen演算子を使用することができますが完了すると、さらにあなたの価値をプッシュ:

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

をそれともまだ永続化のためのObservableを使用したい場合andThenの代わりに別のflatMapを使用してください。

+0

persistの中でdefaultUserResponseを返そうとしていないため、動作しません... – Leonardo

+0

** defaultメソッドの中に** defaultメソッドを返そうとしていません** Persistableメソッドは、 'defaultUserResponse'を' Observable '。 –

+0

最初は不明だったので、何度か編集しました。もう一度確認してください。 –

関連する問題