首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在firebase查询与数据库中的任何内容都不匹配时调用函数

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

Stack Overflow用户
提问于 2019-08-15 18:01:27
回答 2查看 572关注 0票数 1

我正在尝试为react原生项目实现一个好友添加系统。我使用的是firebase实时数据库。问题是,当我使用'equalTo()‘函数进行查询时,如果数据库中没有匹配的数据,我就得不到结果,也不能调用函数来表明没有使用此用户名的用户。我所要做的就是能够说没有找到具有该用户名的用户。

我使用'child_added‘事件类型来获取与搜索到的用户名匹配的用户的userID,但是如果没有匹配的用户名,我的回调函数就不会被调用。如果我使用‘userID’事件类型,那么snapshot.key将返回字符串'users‘,并且snapshot.val()没有匹配用户的userID(如果有)。

这是当前的数据库:

代码语言:javascript
运行
复制
"users": {
    "uid1": {
        "user_details": {
            "username": "username1"
       }
    },
    "uid2": {
        "user_details": {
            "username": "username2"
       }
    }
}

代码如下:

代码语言:javascript
运行
复制
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()就永远不会执行,或者至少它的第二个参数永远不会执行,然后()也永远不会执行。

我没有得到任何错误。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-08-15 21:11:43

将为匹配查询的每个子节点触发child_added事件。如果没有与查询匹配的子节点,则不会触发child_added

要检测是否没有匹配,您需要侦听value事件:

代码语言:javascript
运行
复制
firebase.database().ref('users')
    .orderByChild('user_details/username')
    .equalTo(username)
    .once('value', snapshot => {
      if (!snapshot.exists()) {
        console.log('No users found')
      };
    });

在这种情况下,您也可以将肯定检测添加到value侦听器中,方法是:

代码语言:javascript
运行
复制
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)
        });
      }
    });
票数 0
EN

Stack Overflow用户

发布于 2019-08-15 23:05:49

'child_added'更改为'value'以查询一次,有关更好的解释,请参阅@Frank的答案

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57507969

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档