Это может быть метра асинхронного кода. Я взял часть вашего кода и создал простой пример:
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")
Я добавил в свою коллекцию пожарного магазина collection1
с одним документом, содержащим поле horas: horas_value
- чтобы он работал.
Пример содержит больше информации журнала о том, какой частью кода является конкретный журнал. Когда вы запускаете его как 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
в функцию 'asyn c' и добавить '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
, это не должно быть ... У меня есть пустые массивы ... Может быть, это вопрос способа запуска кода.
Я надеюсь, что это будет помощь!