Проблема с функцией firebase: в асин c функция возвращается неопределенное значение - PullRequest
0 голосов
/ 30 апреля 2020

Я создаю функцию в firebase, которая вызывает другие функции. Этот вызов выполняется асинхронно один за другим. Когда я вызываю функцию "foreachhours ()" , она использует al oop для вызова другой функции с именем "getfilterhours ()" . Когда я беру данные из "getfilterhours ()" , когда они выводятся на экран, они работают правильно. Но когда я присваиваю его переменной, он говорит мне, что мне нужно обещание, поэтому после вызова есть .hen. Проблема в том, что когда я возвращаю данные Ddr, результат либо не определен, либо пустой [] массив. Какие варианты мне нужно вернуть, чтобы это значение не отображалось ни с чем?

async function foreachhours(horasselected: any,key: any){
let ress: any[][]=[];
let Ddr: any[][]=[];
//differents queries, in english horas is equal to "hour"
await horasselected.forEach(async function(hora: { hora: any; }){
    await getfilterhours(hora.hora,key).then(function(res){
        res=[];
        ress.push(res);//res=[{horas:["6:00","9:00"]}]
    });
 //<----The problem is start here--->
 //expected value is [{horas:["6:00","9:00"]},{horas:["5:00","12:00"]}, 
 //{horas:["6:00","19:00"]}
    Ddr.push(ress);//undefined or[]
});
console.log(Ddr);//undefined or []
 return Ddr;//undefined or []
}
//Function to get especific values from a querie in firestore
async function getfilterhours(hora: any,key: any){
var db = admin.firestore();
var elementosaux: any[] = [];
var elementoselement;

await db.collection("pedidos_servicios").where("key","==",key)
    .where("horas","array-contains",hora).get().then(snapshot=>{
        snapshot.forEach(doc3=>{
           elementoselement = {
                "horas": doc3.data().horas
            }
            elementosaux = elementosaux.concat(elementoselement);
        });
    }).catch((e)=>console.log(e));         
return elementosaux;//elementosaux=[{horas:["6:00","9:00"]}]}

Спасибо за вашу помощь! :)

...