首先,我用一个文档搜索特定的文档。在此函数中,我使用不同的过滤器从数据中获取特定值。此过滤器的结果是一个数组,该数组将使用它形成"foreach"。结果以elementosaux
连接,下一个等于elementos
。问题是我打印 o 获取值elementos
结果是undefined
这是代码。感谢您的帮助。
exports.autentifyday = functions.https.onRequest((req, res) => {
cors(req, res, () => {
var db = admin.firestore();
const key=req.query.key;
const dia=req.query.dia;
db.collection("/servicios_disponibles/").doc(key).get().then(function(doc){
var Ddr;
var Str;
var horario;
var horas;
var horasaux;
var horasselected;
var elementos: any[] = [];
var elementosaux: any[] = [];
var elementoselement;
if( doc.exists){
var diaselected;
Ddr = JSON.parse(JSON.stringify(doc.data()));
horario=Ddr.horario;
horario.filter((dias: { dia: any; disponibilidad: boolean; })=>{
if(dias.dia==dia){
if(dias.disponibilidad==true){
diaselected=dias;
}
}
});
horas=JSON.parse(JSON.stringify(diaselected));
horasaux=horas.horas;
horasselected=horasaux.filter((hora: { disponibilidad: boolean; })=>hora.disponibilidad==true);
horasselected.forEach(function(hora: { hora: any; }){
db.collection("pedidos_servicios").where("key","==",key)
.where("horas","array-contains",hora.hora).get().then(snapshot=>{
snapshot.forEach(doc3=>{
elementoselement = {
"horas": doc3.data().horas
}
elementosaux = elementosaux.concat(elementoselement);
console.log(elementosaux)//return an array with the answer query
});
elementos=[];
elementos=elementosaux;
console.log(elementos)//is undefined in this point
}).catch((e)=>console.log(e))
})
}
console.log(elementosaux)//is undefined in this point
res.send(Str);
return Str;
}).catch(reason => {
res.send(reason);
console.log(reason);
return reason;
});
});
});
这可能是异步代码的重创。我采用了您的部分代码并创建了简单示例:
const db = new Firestore()
var elementos: any[] = [];
var elementosaux: any[] = [];
var elementoselement;
let colRef = db.collection("collection1");
if (true) {
console.log("start")
colRef.get().then((snapshot) => {
snapshot.forEach(doc3=>{
elementoselement = {
"horas": doc3.data().horas
}
console.log("elementoselement",elementoselement)
elementosaux = elementosaux.concat(elementoselement);
console.log("elementosaux inside snapshot", elementosaux)//return an array with the answer query
});
elementos=[];
elementos=elementosaux;
console.log("elementos inside snapshot", elementos)//is undefined in this point
});
console.log("elementosaux outside snapshot", elementosaux)
console.log("elementos outside snapshot", elementos)
}
console.log("elementosaux outside if", elementosaux)//is undefined in this point
console.log("end")
我向我的 firestore 收藏中添加了一个包含字段horas: horas_value
的文档collection1
- 以使其正常工作。
该示例包含有关特定日志的哪一部分代码的更多日志信息。当您像ts-node test_main.ts
一样运行它时,您会得到以下结果:
start
elementosaux outside snapshot []
elementos outside snapshot []
elementosaux outside if []
end
elementoselement { horas: 'horas_value' }
elementosaux inside snapshot [ { horas: 'horas_value' } ]
elementos inside snapshot [ { horas: 'horas_value' } ]
由于get
是异步的,因此您可以看到其中的日志位于末尾。 有很多可能性可以解决这个问题。例如,您可以将整个if
放在"异步"函数中,并添加"await"以获得:
async function main() {
if (true) {
....
await colRef.get().then((snapshot) => {
....
}
main()
然后结果是:
start
elementoselement { horas: 'horas_value' }
elementosaux inside snapshot [ { horas: 'horas_value' } ]
elementos inside snapshot [ { horas: 'horas_value' } ]
elementosaux outside snapshot [ { horas: 'horas_value' } ]
elementos outside snapshot [ { horas: 'horas_value' } ]
elementosaux outside if [ { horas: 'horas_value' } ]
end
只是我不知道你为什么说这是undefined
,不应该是... 我有空数组...也许这是如何运行代码的方法问题。
我希望它会有所帮助!