【发布时间】:2021-05-19 11:29:55
【问题描述】:
我有以下代码:
const DuellScreen = () => {
...
const [code, setCode] = useState("");
const [keyExisting, setExi] = useState(true);
...
return (
...
<BlockButton
text="Apply"
onPress={() => {
keyExists(code, setExi)
if (keyExisting == true) {
Alert.alert("Game joined");
} else if (keyExisting == false) {
Alert.alert(
"Game does not exist or someone has already joined"
);
}
}}
/>
...)
我的函数 keyExists 正在使用 firebase/firestore,因此可能需要一段时间才能更新 keyExisting。
这导致我的 if 语句的错误结果。
这也是一个标志,即第一次按下按钮时,if 语句始终为“真”,因为那是初始状态。如果我将初始状态更改为“false”,则第一次单击按钮后 if 语句的结果始终为“false”。
所以第一次点击按钮始终是初始状态(useState),但应该在if语句之前更新...
如果需要,这也是我的 keyExists 函数:
export const keyExists = (setKey, keyExi) => {
duettsRef
.where("key", "==", setKey)
.where("player1", "!=", firebase.auth().currentUser.uid)
.where("player2", "==", "")
.limit(1)
.get()
.then((querySnapshot) => {
keyExi(!querySnapshot.empty);
if (!querySnapshot.empty) {
querySnapshot.docs[0].ref.update({
player2: firebase.auth().currentUser.uid,
});
}
})
.catch((e) => console.log(e));
};
我做错了什么?
【问题讨论】:
-
你想等到你的功能完成吧?你可以使用 promise 来等待代码执行你的函数,然后继续。如果我的方向正确,请告诉我,我可以在这方面为您提供更多帮助。
-
@DipanSharma 是的,没错。我将非常感谢您提供更多帮助
标签: reactjs firebase react-native google-cloud-firestore