这个问题在这里已经有一个答案:>
Speed up fetching posts for my social network app by using query instead of observing a single event repeatedly1
考虑到这个数据结构:
考虑到这个数据结构:
{ "users":{ "user-1":{ "groups":{ "group-key-1":true,"group-key-3":true } } },"groups":{ "group-key-1":{ "name":"My group 1" },"group-key-2":{ "name":"My group 2" },"group-key-3":{ "name":"My group 3" },"group-key-4":{ "name":"My group 4" },} }
firebase.database().ref('users/user-1/groups').on(...)
这将给我这个对象:
{ "group-key-1":true,"group-key-3":true }
所以现在我想要检索这些组的信息.
我最初的直觉是循环这些键,并做到这一点:
var data = snapshot.val() var keys = Object.keys(data) for (var i = 0; i < keys.length; i++) { firebase.database().ref('groups/' + keys[i]).on(...) }
这是在Firebase中同一端点上调用多个键的适当方式吗?
Firebase提供了更好的解决方案吗?
解决方法
Is this the appropriate way to call multiple keys on the same endpoint
in Firebase?
是的,一般来说,这是一个很好的解决方案,以这种方式检索每个组
Does Firebase provide a better way to solve this problem?
在这种情况下,我不认为Firebase提供任何其他可以帮助的功能/查询.
无论如何,这可以改进将参考保存在变量中,并直接循环对象的键.另外,如果你只需要检索一次数据,你应该使用一次()而不是on()
var groupRef = firebase.database().ref('groups/') var data = snapshot.val() for (var groupID in data) { groupRef.child(data[groupID]).once(...) }
另一种方式可能是使用Firebase的functions数据快照,如forEach
snapshot.forEach(function(childSnapshot) { groupRef.child(childSnapshot.key).once(...) })