将变量值从块带到全局作用域(在FIRESTORE中)



我正在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)); 

相关内容

  • 没有找到相关文章

最新更新