RxJava 链中的操作无法正常工作

Action in RxJava chain not working as it should

我是 RxJava 和 RxFirebase 的新手,我正在为我的应用程序制作一个注册系统。注册过程中的所有步骤都需要按顺序进行,如果某个步骤失败,则该顺序需要中止。

这是我的注册码 UI class。我在另一个 class 上调用 register() 并订阅 return 值,这是一个 Maybe.

        MyClass.register(username, email, password, photo_uri)
            .subscribe(
                a -> log(a.getUser().getDisplayName()),
                error -> { }                    
            )

在寄存器函数中我有我的 "chain":

    public Maybe<AuthResult> register(String username, String email, String pass, Uri photo_uri) {
        return RxFirebaseAuth.createUserWithEmailAndPassword(mAuth, email, pass)
            .doAfterSuccess(authResult -> setFirebaseUsername(authResult.getUser(), username))
            .doAfterSuccess(authResult -> setFirestoreUsername(authResult.getUser(), username));
    }

问题出在 SetFirestoreUsername:

        public Completable setFirestoreUsername(FirebaseUser user, String username) {
            HashMap<String, Object> profile_data = new HashMap<>();
            profile_data.put("username", username);

            DocumentReference document = FirebaseFirestore.getInstance().collection("users").document(user.getUid());

            // Works
            //RxFirestore.setDocument(document, profile_data).subscribe();

            // Doesn't work
            return RxFirestore.setDocument(document, profile_data);
        }

如果您看一下 "works / doesn't work" 评论,那段有效的代码和无效的代码之间的区别在于,后者是 returned 并在订阅链。我已验证调用了 setFirestoreUsername。唯一的区别是,当我使用 return 时,RxFirestore.setDocument 的内部工作根本不起作用,但不会抛出任何错误。

使用流经管道的值调用 doAfterSuccess() 运算符,在您的示例中为 setFirestoreUsername(authResult.getUser(), username)。这只是一个方法调用,结果不用作观察者链的一部分。

因为它不是观察者链的一部分,所以没有订阅。您可能需要使用 flatMapCompletable() 运算符而不是 doAfterSuccess().