我有这段代码,我只需要返回一个uid,以便以后可以使用该ID进行Firestore操作
$(document).ready(function () {
var uid;
auth.onAuthStateChanged(function (user) {
if (user != null) {
uid = user.uid;
console.log(typeof uid)//returns a string ;
}
});
console.log(uid);
function fetch() {
var docRef = db.collection("Users").doc(uid);
docRef.get().then(function (doc) {
console.log(doc.data);
}).catch(function (error) {
console.log("Error getting document:", error);
});
}
});
如何存储uid以便以后检索它以进行数据库操作。
当前,运行check
函数将返回错误uid
未定义。如果尝试登录uid
进行控制台,则相同。
我猜该函数在侦听器解析之前运行,但是我将如何解决此问题。由于用户之间的互联网连接速度不同,设置计时器也无济于事
(添加代码)
check1();
check3();
//fetch();
function check1() {
if (typeof uid === 'undefined') {
console.log("not ready");
return false
}
}
function check3() {
if (check1 == false) {
check1();
} else {
console.log("ready"); //here this logs ready
console.log(typeof uid); //then here it logs "undefined" still
fetch(); //so this function call brings the error
}
}
function fetch() {
var docRef = db.collection("Users").doc(uid);
docRef.get().then(function (doc) {
console.log(doc.data();
}).catch(function (error) {
console.log("Error getting document:", error);
});
}
如果check3
未定义,为什么uid
函数会准备好记录。我还需要隐藏一个特定的链接,直到uid
有一个值为止。
我该如何改善上面的代码而保留链接
答案 0 :(得分:1)
您的猜测几乎可以肯定是正确的,即您在身份验证成功完成之前正在呼叫check
。设置计时器并不能真正帮助您防弹。
由于我们不知道您何时或在什么条件下需要致电check
,因此很难建议采取其他措施。至少,check
应该检查uid是否尚未定义,如果不存在,请拒绝执行任何操作。
通常,将对UI进行编码,直到用户成功登录后才允许用户执行任何操作。