Я новичок в RxJava и RxFirebase, и я делаю систему регистрации для моего приложения.Все шаги в процессе регистрации должны выполняться последовательно, и эта последовательность должна быть прервана в случае сбоя шага.
Это код из моего класса пользовательского интерфейса регистра.Я вызываю register () для другого класса и подписываюсь на возвращаемое значение, которое представляет собой Maybe.
MyClass.register(username, email, password, photo_uri)
.subscribe(
a -> log(a.getUser().getDisplayName()),
error -> { }
)
Внутри функции регистра у меня есть «цепочка»:
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);
}
Если вы посмотрите на комментарии «работает / не работает», разница между фрагментом кода, который работает, и кодом, который не работает, заключается в том, чтопоследний возвращается и используется в цепочке подписки.Я подтвердил, что setFirestoreUsername вызывается.Разница лишь в том, что когда я использую return, внутренняя работа RxFirestore.setDocument просто не работает, но никаких ошибок не выдается.