【问题标题】:Getting data from Cloud Firestore从 Cloud Firestore 获取数据
【发布时间】:2021-07-15 16:47:55
【问题描述】:
我正在努力从 Firestore 云中获取数据。问题是我有一个函数,里面有来自数据库的数据,但我无法将它从函数中取出。下面我附上代码。
function logBook(doc){
let names = doc.data().name;
console.log(names);
}
db.collection('flights').get().then((snapshot) =>{
snapshot.docs.forEach(doc => {
logBook(doc);
});
})
console.log(names);
控制台输出:https://prnt.sc/1bgrice
谢谢!
【问题讨论】:
标签:
javascript
database
firebase
google-cloud-firestore
【解决方案1】:
您可能错过了这样一个事实,即如果您在函数中使用then,它将离开函数的同步流程,并且您无法按预期返回结果。
试试这样的代码:
function logBook(doc) {
let names = doc.data().name;
console.log(names);
}
async function getData() {
const result = [];
const snapshot = await db.collection("flights").get();
snapshot.docs.forEach((doc) => {
logBook(doc);
result.push(doc);
});
return result;
}
了解 Firestore SDK 的 async 特性非常重要。
【解决方案2】:
答案比您想象的要简单得多。您只需在函数外部声明一个变量,而不是在函数内部为其赋值。像这样的:
var globalVar;
function logBook(doc){
let names = doc.data().name;
globalVar = names;
console.log(names);
}
db.collection('flights').get().then((snapshot) =>{
snapshot.docs.forEach(doc => {
logBook(doc);
});
})
console.log(names);
此外,如果您使用 let 关键字分配变量,它将在函数内部进行作用域。我可以向您推荐这个主题:What's the difference between using "let" and "var"?
(如果您不想在入门问题中添加垃圾邮件,可以通过 dc 与我联系:vargaking#4200)