【发布时间】:2020-10-10 22:34:43
【问题描述】:
我已经被这个问题困扰了很长一段时间了,不知道发生了什么。
我正在运行以下函数:
const getEmployees = async () => {
const query = await db.collection('employees')
const employees = query.onSnapshot(function (querySnapshot) {
const employeeArr = [];
querySnapshot.forEach(function (doc) {
employeeArr.push(doc.data());
});
console.log(1, employeeArr)
return employeeArr;
})
console.log(2, employees)
return employees
}
console.log(employeeArr) 准确地显示了我想要检索的内容:一个包含员工详细信息(姓名、生日)的对象的数组。但是,当我在记录以下内容后返回此数组和 console.log(employees) 时:
ƒ () {
i.Xl(), r.os.ds(function () {
return Rr(r.B_, o);
});
}
这 (2) 也记录在数组 (1) 之前。
我一直在关注 firestore 上的文档,到目前为止一切都很好,但我无法理解这一点。如果我调用 getEmployees() 并存储它返回的值,它也会显示函数。任何人都知道为什么以及如何解决它?谢谢!
【问题讨论】:
-
这在here 中有更详细的解释,但关键在于:
onSnapshot不会返回有用的值,而是需要一个回调函数,它将向其中提供数据。它返回的是一个“取消订阅”函数,当您完成快照时,您应该调用它。 -
@raina77ow 不,onSnapshot 返回一个非常有用的函数,您可以使用该函数取消注册您在完成后应该调用的侦听器。
-
@DougStevenson 重点是它并不重要,但这不是 OP 期望使用的值。
-
@raina77ow 谢谢!这很有意义:D 我将使用回调来获取我需要的数据!
标签: javascript reactjs firebase google-cloud-firestore es6-promise