是否可以一次查询firebase(node.js)中的多个键?

时间:2017-08-14 15:31:31

标签: node.js firebase firebase-realtime-database firebase-admin

目前我正在做一个forEach循环来根据用户的收藏填充数组:

usersref.child(formData.openid + '/favorites').once('value', function(snapshot){
  var favlist = [];
  snapshot.forEach(function(fav){
    fav = fav.key();
    ref.child(fav).once('value',function(snapshot){
      favlist.push(snapshot.val());
    });
  });
  response.writeHead(200, {'Content-Type': 'application/javascript'});
  response.write(favlist);
  response.end();
});

usersref是用户的数据库,ref是项目的数据库。 formData.openid是用户的唯一ID。

1 个答案:

答案 0 :(得分:1)

由于这两个列表是分离的,因此您需要为每个项目单独读取。但是为了确保在将响应发送到客户端之前完成所有读取,您可以使用promises:

usersref.child(formData.openid + '/favorites').once('value', function(snapshot){
  var promises = [];
  snapshot.forEach(function(fav){
    promises.push(ref.child(fav.key()).once('value'));
  });
  Promise.all(promises).then(function(snapshots) {
    var favlist = snapshots.map(function(snapshot) { return snapshot.val(); });
    response.writeHead(200, {'Content-Type': 'application/javascript'});
    response.write(JSON.stringify(favlist));
    response.end();
  }).catch(function(error) {
    response.status(500).send(error);
  });
});