0

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

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

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

但是当我在函数之后记录变量时,它再次返回 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 

请帮助我解决我做错了什么或缺少此代码。

4

1 回答 1

0

你可以做(​​如果你在节点中替换)来创建一个全局window.order = yourValue变量。windowglobalorder

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

所以这应该有效

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)); 
于 2020-02-27T10:41:26.627 回答