angular - 从 firebase 集合中获取文档对象
问题描述
刚开始使用 Firebase 云,我被困住了。我希望解决方案是一个简单的解决方案,但到目前为止我无法解决它。
我使用模型创建了一个项目(https://github.com/DragosB88/vending-machine),但现在我想使用firebase。所以我在firebase cloud上创建了一个项目,并在那里创建了一个集合和一个对象文档:
// SET FIRESTORE PRODUCTS - function inside service
setDBProducts(data) {
this.firestore
.collection('vendingProducts') // collection name on Cloud Firestore
.doc('products') // document name on Cloud Firestore
.set(Object.assign({}, data)); // it only accepts objects, thus arrays must be converted
}
效果很好:
问题是,当我尝试检索数据时,我得到了不同的对象(取决于我提出的请求),这些对象不包含 firebase 上的任何数据。
// GET FIRESTORE PRODUCTS - service function
getDBProducts() {
return this.firestore.collection('vendingProducts').doc('products').get();
}
// ---------------------------------------------------------------
// GET FIRESTORE PRODUCTS - component function inside constructor
this.dbProducts = ProductsService.getDBProducts().subscribe(
(res) => (this.dbProducts = res)
);
// this.dbProducts = ProductsService.getDBProducts();
console.log('DATABASE PRODUCTS: ', this.dbProducts);
如何从 firebase 获取产品?(顺便说一句,我也是可观察的新手)
解决方案
数据从 Firebase 异步加载。任何需要访问数据的代码都需要在您的subscribe
回调中(或从那里调用)。
在您当前的代码中,当您console.log('DATABASE PRODUCTS: ', this.dbProducts)
运行时,this.dbProducts = res
尚未执行。
所以这是一种解决方案:
this.dbProducts = ProductsService.getDBProducts().subscribe((res) => {
this.dbProducts = res;
console.log('DATABASE PRODUCTS: ', this.dbProducts);
});
推荐阅读
- ruby - 为什么 Jenkins 对 Jenkinsfile 的行为很奇怪?
- android - 如何在 android 中创建进度条而不使用 xml 文件中的进度条小部件?
- javascript - 如何通过位于嵌套括号之外的 AND 拆分字符串?
- php - 从一个表中选择所有,但如果它存在于另一个表中,则将其删除
- ethereum - pancakeswap 外围的导入不存在
- audio - 用 ffmpeg 修剪视频;在 Mac 上看起来不错,但音频/视频与 Windows 默认播放器不同步 3 秒。嗯?
- c# - 如何在 Net 5.0 C# 中使用 Quartz 从 Job 更新数据库?
- javascript - JSON逻辑检查最佳方法
- meteor - 第一次使用meteor-up部署meteor应用
- postgresql - Postgres 中的 ctid 链是否在行的并发更新下分叉?