目前我正在做一个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。
答案 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);
});
});