React Native | Firebase Firestore |仅在按两次后存储用户数据
我期望的是:当我按下文本“注册”一次时,它将在firebase auth中创建一个用户,然后在firestore中创建一个具有单个属性的用户 实际发生的情况:当我按下文本“注册”时,它会立即在firebase auth中创建一个用户,但当我再次按下用户名字段、密码字段或注册按钮时,它只会在firestore中创建一个具有该属性的用户 我怀疑:这与我的承诺和我的计划有关,但我不明白为什么它会这样运作;看起来真的很奇怪 示例代码:React Native | Firebase Firestore |仅在按两次后存储用户数据,firebase,react-native,google-cloud-firestore,firebase-authentication,Firebase,React Native,Google Cloud Firestore,Firebase Authentication,我期望的是:当我按下文本“注册”一次时,它将在firebase auth中创建一个用户,然后在firestore中创建一个具有单个属性的用户 实际发生的情况:当我按下文本“注册”时,它会立即在firebase auth中创建一个用户,但当我再次按下用户名字段、密码字段或注册按钮时,它只会在firestore中创建一个具有该属性的用户 我怀疑:这与我的承诺和我的计划有关,但我不明白为什么它会这样运作;看起来真的很奇怪 示例代码: import React from "react"; import
import React from "react";
import * as firebase from "firebase";
import "firebase/firestore";
const Screen = () => {
const firestore = firebase.firestore();
const writeUserData = uid => {
const docRef = firestore.doc(`users/${uid}`);
docRef
.set({
example_property
})
.then(item =>
console.log("successfully added user to the collection" + item)
)
.catch(err => {
console.log(err);
});
};
return (
<View style={styles.container}>
<TouchableOpacity
style={styles.submitButton}
onPress={() =>
firebase
.auth()
.createUserWithEmailAndPassword(email, password)
.then(userObj => writeUserData(userObj.user.uid))
.catch(error => {
var errorCode = error.code;
var errorMessage = error.message;
console.log("errorCode: " + errorCode);
console.log("errorMessage: " + errorMessage);
})
}
>
<Text>Sign Up</Text>
</TouchableOpacity>
</View>
);
};
现在,我已经从.then in writeUserData中删除了匿名函数。请看这里:
const writeUserData = uid => {
const docRef = firestore.doc(`users/${uid}`);
docRef
.set({
example_property
})
.then(console.log("successfully added user"))
.catch(err => {
console.log(err);
});
};
也许在您最初的示例中,在初始启动时还没有用户?具体请参见关于用户如何可以为null以及如何侦听authState的部分。但恭喜你解决了你的问题!感谢@Tedskovsky的建议,我已经考虑过了,但之前该应用程序一次只做几分钟,然后在我再次按下选择器后立即创建文档:没问题。另外,我注意到上面代码中有一个输入错误:userObj.User.uid需要大写U