我正在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
请帮助我解决我做错了什么或此代码缺少什么。
您只需执行window.order = yourValue
(如果您在节点中,则用global
替换window
(即可创建全局order
变量。
您还必须了解,您的代码是异步,这意味着更新将在调用getField函数后发生。因此,寻找新的价值是行不通的。但是,getFields函数返回一个始终满足的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));