在Firebase中查询多个键

Kur*_*usu 4 javascript firebase firebase-realtime-database

我的Firebase数据库中有已知密钥列表

-Ke1uhoT3gpHR_VsehIv
-Ke8qAECkZC9ygGW3dEJ
-Ke8qMU7OEfUnuXSlhhl
Run Code Online (Sandbox Code Playgroud)

不是循环遍历每个密钥以获取其各自对象的快照,而是如何在一个统一的请求中查询每个密钥?Firebase是否提供此功能?

我发现了Promise.all()看起来很有前途的功能(我发誓没有双关语)但是我不确定如何使用标准方式获取firebase数据,如此

var userId = firebase.auth().currentUser.uid;
return firebase.database().ref('/users/' + userId).once('value').then(function(snapshot) {
  var username = snapshot.val().username;
});
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助!

Fra*_*len 14

正如David的评论所暗示的那样:如果项目在某种程度上相关,那么您可以构建一个查询来获取所有项目.

否则这将成功:

var keys = [ 
  "-Ke1uhoT3gpHR_VsehIv",
  "-Ke8qAECkZC9ygGW3dEJ",
  "-Ke8qMU7OEfUnuXSlhhl"
];
var promises = keys.map(function(key) {
  return firebase.database().ref("/items/").child(key).once("value");
});
Promise.all(promises).then(function(snapshots) {
  snapshots.forEach(function(snapshot) {
    console.log(snapshot.key+": "+snapshot.val());
  });
});
Run Code Online (Sandbox Code Playgroud)

请注意,使用单独的请求检索每个项目并不像您想象的那么慢,因为请求都是通过单个连接发送的.有关详细说明,请参阅使用查询加快获取社交网络应用的帖子,而不是反复观察单个事件.