我试图弄清楚如何从网络中获取结果,将其保留下来并将响应正文返回给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;}
脚步:
我从服务器获取DefaultUserResponse。
将命令转换为用户(命令= DTO)
在本地坚持用户。
返回DefaultUserResponse。
我应该如何进行?
谢谢
最佳答案
考虑将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
。