我正在尝试为react原生项目实现一个好友添加系统。我使用的是firebase实时数据库。问题是,当我使用'equalTo()‘函数进行查询时,如果数据库中没有匹配的数据,我就得不到结果,也不能调用函数来表明没有使用此用户名的用户。我所要做的就是能够说没有找到具有该用户名的用户。
我使用'child_added‘事件类型来获取与搜索到的用户名匹配的用户的userID,但是如果没有匹配的用户名,我的回调函数就不会被调用。如果我使用‘userID’事件类型,那么snapshot.key将返回字符串'users‘,并且snapshot.val()没有匹配用户的userID(如果有)。
这是当前的数据库:
"users": {
"uid1": {
"user_details": {
"username": "username1"
}
},
"uid2": {
"user_details": {
"username": "username2"
}
}
}
代码如下:
firebase.database().ref('users')
.orderByChild('user_details/username')
.equalTo(username)
.once('child_added', snapshot => {
console.log('User found');
})
.then(() => {
console.log('No users found')
});
用户名是通过函数调用传递的。
如果查询找不到与用户名相同的结果,once()就永远不会执行,或者至少它的第二个参数永远不会执行,然后()也永远不会执行。
我没有得到任何错误。
发布于 2019-08-15 21:11:43
将为匹配查询的每个子节点触发child_added
事件。如果没有与查询匹配的子节点,则不会触发child_added
。
要检测是否没有匹配,您需要侦听value
事件:
firebase.database().ref('users')
.orderByChild('user_details/username')
.equalTo(username)
.once('value', snapshot => {
if (!snapshot.exists()) {
console.log('No users found')
};
});
在这种情况下,您也可以将肯定检测添加到value
侦听器中,方法是:
firebase.database().ref('users')
.orderByChild('user_details/username')
.equalTo(username)
.once('value', snapshot => {
if (!snapshot.exists()) {
console.log('No users found')
}
else {
snapshot.forEach(child => {
console.log('User found: '+child.key)
});
}
});
发布于 2019-08-15 23:05:49
将'child_added'
更改为'value'
以查询一次,有关更好的解释,请参阅@Frank的答案
https://stackoverflow.com/questions/57507969
复制相似问题