将变量值从 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));
我正在 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));