Javascript 在返回记录数组之前,请等待Firebase读取列表完成

Javascript 在返回记录数组之前,请等待Firebase读取列表完成,javascript,firebase,asynchronous,firebase-realtime-database,Javascript,Firebase,Asynchronous,Firebase Realtime Database,我想使用带有firebase函数的amp列表。我需要等待,直到数组中汇集了多条记录,然后才能返回它 这里是我目前使用的代码(由于异步db读取而无法工作): 我需要如何改进它(计算所有读取,然后退出&res.send(data))?使用promise.all等待promises返回快照。有关示例,请参见下面的代码 let data = []; let allDataPromises =[]; // going to the push the promises into this array for

我想使用带有firebase函数的amp列表。我需要等待,直到数组中汇集了多条记录,然后才能返回它

这里是我目前使用的代码(由于异步db读取而无法工作):


我需要如何改进它(计算所有读取,然后退出&res.send(data))?

使用promise.all等待promises返回快照。有关示例,请参见下面的代码

let data = [];
let allDataPromises =[]; // going to the push the promises into this array
for (var key in user.favorites) {
    if (user.favorites.hasOwnProperty(key)){
       allDataPromises.push(admin.database().ref('/records/'+key).once('value')); // returns the promise
    }
}

if(allDataPromises.length>0){
    return Promise.all(allDataPromises).then(function (snaps){
        snaps.forEach(function(s){
            const record = s.val();
            console.log(record.name); //works o.k.
            data.push(record);
        });

        if(data.length>0){
           return res.status(200).send(data);
        }else {
           return res.status(400).send('{message:"No Record Found"}');
        }            
    });
}
else{
  return res.status(400).send('{message:"No Promises Found"}');
}

使用promise.all等待promises返回快照。有关示例,请参见下面的代码

let data = [];
let allDataPromises =[]; // going to the push the promises into this array
for (var key in user.favorites) {
    if (user.favorites.hasOwnProperty(key)){
       allDataPromises.push(admin.database().ref('/records/'+key).once('value')); // returns the promise
    }
}

if(allDataPromises.length>0){
    return Promise.all(allDataPromises).then(function (snaps){
        snaps.forEach(function(s){
            const record = s.val();
            console.log(record.name); //works o.k.
            data.push(record);
        });

        if(data.length>0){
           return res.status(200).send(data);
        }else {
           return res.status(400).send('{message:"No Record Found"}');
        }            
    });
}
else{
  return res.status(400).send('{message:"No Promises Found"}');
}