gpt4 book ai didi

javascript - 当 firebase 查询与数据库中的任何内容都不匹配时如何调用函数

转载 作者:行者123 更新时间:2023-11-28 03:38:22 25 4
gpt4 key购买 nike

我正在尝试为 React Native 项目实现一个好友添加系统。我正在使用 firebase 实时数据库。问题是当我使用“equalTo()”函数进行查询时,如果数据库中没有匹配的数据,我不会得到结果,并且无法调用函数来表示没有使用该用户名的用户。我想做的就是能够说没有找到使用该用户名的用户。

我使用“child_added”事件类型来获取与搜索的用户名匹配的用户的用户ID,但如果没有匹配的用户名,我的回调函数永远不会被调用。如果我使用“value”事件类型,则 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()永远不会执行,或者至少它的第二个参数永远不会执行,那么then()也永远不会执行。

我没有收到任何错误。

最佳答案

对于与查询匹配的每个子节点,都会触发 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)
});
}
});

关于javascript - 当 firebase 查询与数据库中的任何内容都不匹配时如何调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57507969/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com