[英]How can I set data from firestore to a global variable
我正在尝试从 firestore 获取数据并将其设置为全局变量,但我未定义。 这是我所拥有的;
let myScore;
auth.onAuthStateChanged((user) => {
let docRef = db.collection("players");
let user_email = user.email;
docRef.onSnapshot((players) => {
players.forEach((doc) => {
data = doc.data();
if (user_email == data.email) {
myScore = data.endless_score;
console.log(myScore); //This log the right score
}
});
});
});
console.log(myScore); // This logs undefined
如何获得 myScore 即第二个控制台日志以从 firestore 输出分数?
调用 onSnapshot 会创建一个对 firestore 的后台调用。 它独立于您的其余代码运行。 所以你的第二个控制台日志实际上是在 let myScore 之后立即调用的,这意味着它仍然是未定义的。
同样,onAuthChanged 是一个观察者。 它可以随机触发,具体取决于您何时登录/退出 firestore。
对于您想要的功能,您需要重写代码以使用 async/await。
将 function() 定义为“async”,然后在您的代码中调用“await function()”将使代码在继续之前等待在线调用完成。
读:
好的,从我所看到的,当用户登录时,您正在尝试获取当前用户,但我认为附加快照侦听器不是最佳解决方案。 因为首先它会被视为对每个播放器文档的读取。 我建议你做的是:
const myUser = (await (await firebase.firestore().collection("players").where("email","==",user.email).limit(1).get()).docs[0].data()
这将为您提供当前用户的数据,然后您可以通过执行 myUser.endless_score 随意使用它。 它还可以降低成本,因为您只会收到一个文档,其中电子邮件等于当前用户的电子邮件
也不要忘记使箭头函数异步以使用 await :)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.