Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/457.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Firebase嵌套查询在我们';我们不允许连接_Javascript_Firebase_Firebase Realtime Database - Fatal编程技术网

Javascript Firebase嵌套查询在我们';我们不允许连接

Javascript Firebase嵌套查询在我们';我们不允许连接,javascript,firebase,firebase-realtime-database,Javascript,Firebase,Firebase Realtime Database,我想在用户之间实现一个跟踪系统。 为此,我想显示我的应用程序的所有250个用户,然后在我已经关注的用户旁边添加一个复选标记按钮,在我没有关注的用户旁边添加一个空按钮 var usersRef = firebase.database().ref(‘/users’); var followingRef = firebase.database().ref(‘/followingByUser’); var displayedUsers = []; // I loop through all users

我想在用户之间实现一个跟踪系统。 为此,我想显示我的应用程序的所有250个用户,然后在我已经关注的用户旁边添加一个复选标记按钮,在我没有关注的用户旁边添加一个空按钮

var usersRef = firebase.database().ref(‘/users’);
var followingRef = firebase.database().ref(‘/followingByUser’);
var displayedUsers = [];

// I loop through all users of my app
usersRef.once('value', users => {

  users.forEach(user => {     

    // For each user, I check if I already follow him or not
    followingRef.child(myUid).child(user.key).once('value', follow => {

      if (follow.val()) {

        // I do follow this user, follow button is on
        displayedUsers.push({
          name: user.val().name,
          following: true
        });

      } else {

        // I do not follow this user, follow button is off
        displayedUsers.push({
          name: user.val().name,
          following: false
        });

      }

    })
  })
})
执行此操作时,我经常(并非总是)遇到以下错误:“错误:Firebase数据库(4.1.3)内部断言失败:不允许在未连接时调用sendRequest。”


最终,将获取所有数据,但在10秒之后,而不是1秒之后(没有错误)。 我不相信这是一个互联网连接问题,因为我有一个非常快速和稳定的wifi

这样嵌套查询是一种不好的做法吗? 如果没有,为什么会出现此错误

我的数据结构如下:

users: {

  userId1: {
    name: User 1,
    email: email@exemple.com,
    avatar: url.com
  },

  userId2: {
    name: User 2,
    email: email@exemple.com,
    avatar: url.com
  },

  ...
}

followByUser: {

  userId1: {
    userId2: true,
    userId10: true,
    userId223: true
  },

  userId2: {
    userId23: true,
    userId100: true,
    userId203: true
  },

  ...
}

您当前的数据库结构允许您高效地查找每个用户的跟踪对象。正如您发现的,它不允许您查看用户的跟踪对象。如果还希望高效查找后者,则应向模型中添加其他数据:

followedByUser: {
  userId2: {
    userId1: true,
  }
  userId10: {
    userId1: true,
  },
  userId223: {
    userId1: true,
  },
  ...
}
这是Firebase和其他NoSQL数据库中非常常见的模式:您经常扩展数据模型以允许应用程序需要的用例


另请参见和上的说明。

非常感谢您的快速回答。然而,“它不允许您查看用户的跟踪对象”并不是我想要实现的目标。我只是想知道我是否已经在跟踪列表中的每个用户。在故事的结尾,我需要这两个用户的信息:-usersRef:用户名和用户的头像-followerref:如果我跟踪用户或不跟踪用户,那么你为什么不简单地在
/followerbyuser/myUid/uidOfUserIWantToFollow
上附加一个
侦听器呢?也可以看到,但这不是我在示例中已经在做的事情吗?还是应该使用“orderByChild”和“EqualTo”方法来提高性能?(我更新了我的代码,因为它不完全正确)您正在对所有关注者进行循环,而不仅仅是查询相关的关注者。但我觉得我们有点圆滑,所以让我们后退一步:这个代码试图实现什么(也见)?结构
/followByUser/myUid/uidOfUserIWantToFollow:true
的优点之一是,当用户单击“follow”按钮时,您可以反复将其设置为
true
,因为该操作是幂等的。