我的javascript函数不会更新全局变量。为什么会这样呢?

时间:2020-06-28 07:27:17

标签: javascript firebase function global-variables

对于上下文,我正在尝试获取用户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。

1 个答案:

答案 0 :(得分:1)

欢迎来到JavaScript +事件循环的异步世界。

您的console.log(userID)发生在function(user)内的回调函数firebase.auth().onAuthStateChanged被触发之前。因此,您将始终以userId的身份获得'test'。这是预期的行为。

要详细研究此问题,请转到:-

https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Asynchronous/Introducing