node.js - 在全局范围内访问 Firestore 数据
问题描述
我正在尝试访问 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 对象?
谢谢您的帮助。
解决方案
它还不包含来自 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()
完成并返回文档。其余部分同步处理。
推荐阅读
- wix - 使用属性值的 WIX 自定义操作条件不起作用
- amazon-dynamodb - dynamodb 我需要多少读取容量单位
- ruby-on-rails - 需要帮助来建立模型之间的正确关联
- solidity - 如何正确将 SafeMath.sol 导入合约
- r - Smote - 选择 Perc_under 和 Perc_Over
- python - AttributError:“模块”没有属性
- mysql - 在 MYSQL 中如何用减法更新 GROUP BY
- asp.net-core - ClaimTypes.NameIdentifier 与 Microsoft GraphApi 用户 ID 有何关系
- google-cloud-platform - 是否可以仅在 GCP 上首次启动时运行启动脚本?
- php - 引导切换没有响应