Я создаю функцию в 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"]}]}
Спасибо за вашу помощь! :)