Javascript Firebase嵌套查询在我们';我们不允许连接
我想在用户之间实现一个跟踪系统。 为此,我想显示我的应用程序的所有250个用户,然后在我已经关注的用户旁边添加一个复选标记按钮,在我没有关注的用户旁边添加一个空按钮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
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
,因为该操作是幂等的。