我有两个观察值:


Observable<User> createUser(UserData userData)
Observable<Void> loginUser(User user)


用户创建新帐户后,我希望使用该新帐户登录。所以我做到了:

createUser(userData).map(user -> loginUser(user));


但是通过这种方式,我得到了Observable<Void>作为回报。我想做的就是调用createUser(userData).map(user -> loginUser(user))并获得Observable<User>作为回报。像这样:

@Override
public Observable<User> createUserAndLogin(){

    createUser(userData).map(user -> loginUser(user));

}


我该怎么办?

最佳答案

为什么不使用登录作为doOnNext的副作用?

createUser(userData).doOnNext(user -> loginUser(user));


如果要确保登录发生:

createUser(userData).flatMap(user -> {
    // attach a callback to the log-in and return
    // the user from the previous call
    return loginUser(user).map(dontCare -> user);
});


但是我不确定loginUser如果什么都不发出,它将如何工作,所以也许强行将您想要的值连接到空的loginUser可观察值:

 createUser(userData).flatMap(user -> {
    // attach a callback to the log-in and return
    // the user from the previous call
    return loginUser(user).concatWith(Observable.just(user));
});

关于java - 在Rx Java中获得链式map()调用的倒数第二个可观察值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36115453/

10-09 05:28