【发布时间】:2020-09-21 12:36:06
【问题描述】:
我正在使用 firebase - firestore。我有课程和任务集合。 我想从课程集合中获取用户的所有课程,并为每门课程从任务集合中获取天数数据,然后将所有这些数据保存在一个数组中。
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 总是空的(我想我有异步问题) 并且快照完成后不会等待。
【问题讨论】:
-
您是否尝试过调用
getData调用this.setState({data: this.getData()})并声明getData = async () =>箭头函数,该函数将在返回awaiting 之前返回arr? -
是的,我试过了,还是不行。
标签: javascript firebase google-cloud-firestore