对于上下文,我正在尝试获取用户ID并将其分配到数据库中,这是成功的。接下来,当我在函数后调用“ userID”变量(请参阅控制台日志)时,它似乎没有从第一个声明中进行更新。
var userID = 'test';
firebase.auth().onAuthStateChanged(function(user) {
if (user) {
userID = user.uid;
let x = db.collection('users').doc(userID);
x.get().then(function(doc) {
if (doc.exists) {
x.update({Logins: firebase.firestore.FieldValue.increment(1),
'Last login': firebase.firestore.FieldValue.serverTimestamp()});
return userID;
} else {
// adding Login count
x.set({Logins: 1, 'Whispers Received': 0});
}
}).catch(function(error) {
console.log("Error getting document:", error);
});
} else {
// No user is signed in.
}
});
console.log(userID);
“ console.log”显示“ test”而不是用户的ID。
答案 0 :(得分:1)
欢迎来到JavaScript +事件循环的异步世界。
您的console.log(userID)
发生在function(user)
内的回调函数firebase.auth().onAuthStateChanged
被触发之前。因此,您将始终以userId
的身份获得'test'
。这是预期的行为。
要详细研究此问题,请转到:-
https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Asynchronous/Introducing