gpt4 book ai didi

javascript - firestore 从两个表中获取数据,一个接一个返回空数组

转载 作者:行者123 更新时间:2023-12-03 07:06:17 24 4
gpt4 key购买 nike

我正在使用 firebase - firestore。我有类(class)和任务集合。我想从类(class)集合中获取用户的所有类(class),并为每门类(class)从任务集合中获取天数数据,然后将所有这些数据保存在一个数组中。

  getData = () => {
var arr = []
f.auth().onAuthStateChanged(async (user) => {
db.collection("courses")
.where("uid", "==", user.uid)
.get()
.then((snapshot) => {

var a = {};
snapshot.forEach((doc) => {
let coursesData = doc.data()
let courseName = coursesData.name;
let kita = coursesData.kita;
a = { name: courseName, id: doc.data().code, k: kita };
let snapshotData = await db
.collection("tasks")
.where("uid", "==", user.uid)
.where("name", "==", courseName)
.where("kita", "==", kita)
.get();

let numActiveCourse = 0;
snapshotData.forEach((dc) => {
let taskData = dc.data()
console.log('taskData',taskData)
let days = taskData.days;
if (days > 0) {
numActiveCourse = 1;
}
});

a = { ...a, numActiveCourse };
arr.push(a);
console.log("arr2 is", arr);
});
})
.catch((e) => {
console.log("error is courses", e);
});
this.setState({data:arr})

});

};

问题是 arr 总是空的(我想我有异步问题)快照完成后不会等待。

最佳答案

我找到了解决方案。问题是因为我试图让 async await 进入 forEach 并且它不等待回答。解决方案是

 readCourses = async()=>{
f.auth().onAuthStateChanged(async (user) => {
let loadedPosts = {};
let docSnaps = await db.collection("courses").where("uid", "==", user.uid).get();
for (let doc of docSnaps.docs){

let courseName = doc.data().name;
let kita = doc.data().kita
loadedPosts[doc.id] = {
...doc.data(),
k:kita,
id:doc.data().code
}
const taskSnap = await db
.collection("tasks")
.where("uid", "==", user.uid)
.where("name", "==", courseName)
.where("kita", "==", kita)
.get()

let numActiveCourse = 0
for(let task of taskSnap.docs){
let taskData = task.data()
if(taskData.days>0){
numActiveCourse =numActiveCourse+1
}

}
loadedPosts[doc.id].numActiveCourse = numActiveCourse
}
console.log('loadedPosts',loadedPosts)
this.setState({data:loadedPosts})

})

如果您有任何其他解决方案,我希望看到。

关于javascript - firestore 从两个表中获取数据,一个接一个返回空数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62162227/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com