带有布尔 return 函数的 Firestore 查询 returns undefined
Firestore query with a boolean return function returns undefined
这是我的 Firestore 功能:
export const keyExists = (setKey, keyExi) => {
duettsRef
.where("key", "==", setKey)
.where("player2", "==", "")
.where("player1", "!=", firebase.auth().currentUser.uid)
.limit(1)
.get()
.then((querySnapshot) => {
keyExi((querySnapshot) => !querySnapshot.empty );
if (!querySnapshot.empty) {
querySnapshot.docs[0].ref.update({
player2: firebase.auth().currentUser.uid,
});
}
})
.catch((e) => console.log(e));
};
它工作正常。只有 keyExi((querySnapshot) => !querySnapshot.empty );
返回未定义,当我在另一个 .js 文档中这样调用它时:
const MainScreen = () => {
const [keyExisting, keyExi] = useState(null);
return (
...
<CreatedButton
text="Apply"
onPress={() => {
keyExists(code,keyExi)
if (keyExisting == true) {
Alert.alert(
"Game joined"
);
} else if (keyExisting == false){
Alert.alert(
"Game does not exist or someone has already joined"
);
}
}}
/>
...
)
我做错了什么?
在您的代码中,您将 函数 传递给 keyExi:keyExi((x) => ! x.empty))
。在您的代码中,您使用名称 querySnapshot
作为函数的参数,但实际上它与我编写的代码相同。
问题是您的函数定义正在声明函数中使用的新 querySnapshot
变量...它没有使用名为 现有的 变量 querySnapshot
.
我怀疑您想做的是将该行更改为:keyExi(! querySnapshot.empty)
您不想将函数传递给 keyExi
。您要传递计算值 !querySnapshot.empty
.
顺便说一句:我总是向我的开发人员推荐我们使用命名方案的状态变量:const [keyExisting, setKeyExisting] = useState()
。这样,我所有的“状态变量的设置函数”就很容易识别了。函数名称是状态变量名称的不同排列(或更糟...完全独立的名称)会导致调试和维护困难。
这是我的 Firestore 功能:
export const keyExists = (setKey, keyExi) => {
duettsRef
.where("key", "==", setKey)
.where("player2", "==", "")
.where("player1", "!=", firebase.auth().currentUser.uid)
.limit(1)
.get()
.then((querySnapshot) => {
keyExi((querySnapshot) => !querySnapshot.empty );
if (!querySnapshot.empty) {
querySnapshot.docs[0].ref.update({
player2: firebase.auth().currentUser.uid,
});
}
})
.catch((e) => console.log(e));
};
它工作正常。只有 keyExi((querySnapshot) => !querySnapshot.empty );
返回未定义,当我在另一个 .js 文档中这样调用它时:
const MainScreen = () => {
const [keyExisting, keyExi] = useState(null);
return (
...
<CreatedButton
text="Apply"
onPress={() => {
keyExists(code,keyExi)
if (keyExisting == true) {
Alert.alert(
"Game joined"
);
} else if (keyExisting == false){
Alert.alert(
"Game does not exist or someone has already joined"
);
}
}}
/>
...
)
我做错了什么?
在您的代码中,您将 函数 传递给 keyExi:keyExi((x) => ! x.empty))
。在您的代码中,您使用名称 querySnapshot
作为函数的参数,但实际上它与我编写的代码相同。
问题是您的函数定义正在声明函数中使用的新 querySnapshot
变量...它没有使用名为 现有的 变量 querySnapshot
.
我怀疑您想做的是将该行更改为:keyExi(! querySnapshot.empty)
您不想将函数传递给 keyExi
。您要传递计算值 !querySnapshot.empty
.
顺便说一句:我总是向我的开发人员推荐我们使用命名方案的状态变量:const [keyExisting, setKeyExisting] = useState()
。这样,我所有的“状态变量的设置函数”就很容易识别了。函数名称是状态变量名称的不同排列(或更糟...完全独立的名称)会导致调试和维护困难。