将变量值从 Block 带到全局范围(在 FIRESTORE 中)

Bring variable value from Block to Global Scope (in FIRESTORE)

我正在 Firebase 中创建一个应用程序,使用 FireStore 作为我的数据库。

在下面的代码中,我创建了一个变量 order 并为其赋值 1。

然后我将值更新为数字 4 并 console.log 它进行检查。结果很好。

但是当我在函数之后记录变量时,它再次 returns 1,而不是更新后的值。

这是我的代码(请参阅//评论)

    console.log("Value initiated : " + order); // logs 'Value initiated : 1'

    //A function that gets another value from the FireStore Database and assigns it to the variable.
    function getField() {
      db.collection("index")
        .doc("artNum")
        .get()
        .then(function(doc) {
          order = doc.data().artNum; //I reassign the variable to '4' here.
          console.log("Value assigned : " + order); // logs 'Value assigned : 4'
        })
        .catch(err => {
          console.log(err);
        });
    }

    getField(); 
    console.log("Updated Value : " + order); // logs " Updated Value : 1 " but should be equal to 4 

Please help me with what I'm doing wrong or what this code is missing.

您只需执行 window.order = yourValue(如果您在节点中,则将 window 替换为 global)来创建全局 order 变量。

您还必须了解您的代码是异步,这意味着更新将发生在之后您的getField 函数被调用。所以寻找新的价值是行不通的。但是,您的 getFields 函数 returns 始终满足的 Promise(感谢您的 catch 子句)。

所以这应该有效

console.log("Value initiated : " + order); // logs 'Value initiated : 1'

//A function that gets another value from the FireStore Database and assigns it to the variable.
function getField() {
  return db.collection("index")
    .doc("artNum")
    .get()
    .then(function(doc) {
      order = doc.data().artNum; //I reassign the variable to '4' here.
      console.log("Value assigned : " + order); // logs 'Value assigned : 4'
    })
    .catch(err => {
      console.log(err);
    });
}

getField().then(() => console.log("Updated value", order));