2017-04-11 90 views
2

我想弄清楚如何从网络中获取结果,坚持它并将响应体返回给Observable。 像这样:Concat并返回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类型的persist方法(如果你不关心返回值(一个或多个)):

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

那么你可以使用andThen运营商要等到持续完成并进一步推你的价值:

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

或者,如果你仍然想使用Observable的坚持,只需使用另一个flatMap而不是andThen即可。

+0

它不起作用,因为试图返回一个defaultUserResponse里面持久化是不允许的...... – Leonardo

+0

它不是试图返回'defaultUserResponse' **里面的persist方法,它只是_chains_持续返回'defaultUserResponse'包裹到'Observable '。 –

+0

我明白了,第一次不清楚 - 我编了几遍答案,请再检查一次。 –

相关问题