如何解决我管理的日志数组的Firestore onSnapshot值与我返回的值函数不同
我已经坚持了好一阵子了,不知道发生了什么。
我正在运行以下功能:
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()并存储它返回的值,则它还会显示该功能。任何人都知道为什么以及如何解决它?谢谢!
解决方法
您正在将employee.onSnapshot()的结果保存在employees变量中。 同样,使用onSnapshot()时,每次集合中有数据更新时都会调用回调,因此请耐心等待您的代码,我认为您只想获取一次数据并这样做,您只需要:
const employees = await query.get();
此处参考:https://firebase.google.com/docs/firestore/query-data/get-data
,您不能将promise与实时数据库侦听器混合使用。它们不兼容。返回promise的函数(如任何异步函数)旨在异步返回单个结果。 onSnapshot
不会返回promise。相反,只要查询结果发生更改,它就会调用提供的回调。
如果要获得实时结果,则必须正确处理快照侦听器。 onSnapshot
返回一个您调用的函数,以在完成处理后将其删除。您可以在documentation中看到一个示例:
var unsubscribe = db.collection("cities")
.onSnapshot(function (){
// Respond to data
// ...
});
// Later ...
// Stop listening to changes
unsubscribe();
完成后无法删除此侦听器意味着您将泄漏该侦听器,并且随着时间的推移会向您收费。不好。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。