我正在尝试访问Firestore数据并将其推送到数组。这是超级基础,但是由于某些原因,我无法弄清楚为什么它不起作用:
var db = admin.firestore();
let arr = [];
var Ref = db.collection('Test').doc('Document');
var getDoc = Ref.get()
.then(doc => {
if (!doc.exists) {
console.log('No such document!');
} else {
let data = doc.data().Name;
arr.push(data);
}
})
.catch(err => {
console.log('Error getting document', err);
});
console.log(arr) // expecting >>> ['Joe'] (ie: data that is in firestore object)
为什么arr
不包含Firestore对象?
感谢您的帮助。
答案 0 :(得分:0)
它不包含来自Firestore 的数据。
get()
通过返回Promise然后继续执行程序来异步操作。下一行是console.log(arr)
,但尚未填充arr
-在Promise完成时填充(称为then()
部分)。
如果您使用的节点版本足够现代(此时应使用节点8及更高版本),则可以使用await
等待异步操作完成,然后再继续操作。下一行。
我还没有测试过,但是重写后您的代码可能看起来像这样:
doc = await Ref.get();
if (!doc.exists) {
console.log('No such document!');
} else {
let data = doc.data().Name;
arr.push(data);
}
console.log(arr)
这将起作用,因为await
等待异步get()
完成并返回文档。其余部分将被同步处理。