【发布时间】:2020-10-31 08:51:31
【问题描述】:
我是使用 angular 和 firebase 的初学者,但我在学习的某个阶段遇到了困难。我的母语不是英语。
我遵循了一个使用实时数据库的教程,但我现在正在尝试使用 firestore 锻炼自己。
我有一个名为“categories”的集合,其中包含“toys”、“pizza”等类别。
我的目标是使用与我之前看到的教程类似的方法来检索这些类别,所以请不要向我发送完全不同的东西,我正在努力学习,而不是让这个工作(好吧,在某些方式但是..你明白啊)。
这就是我的服务
getCategories () {
let categories = [];
this.db.collection("categories").get().toPromise().then(function(querySnapshot) {
querySnapshot.forEach(function(doc) {
categories[doc.id] = doc.data();
});
console.log("getCategories() returned : ");
console.log(categories);
return categories;
})
.catch(function(error) {
console.log("Error getting documents: ", error);
});
}
这是我的组件
export class ProductFormComponent {
categories$;
constructor(categoryService: CategoryService) {
this.categories$ = categoryService.getCategories();
}
}
我正在尝试使用“toPromise()”来创建一个可以获取所有类别的 Promise,并将其显示在一个名为 categories$ 的可观察对象中。
不幸的是,数据似乎在页面渲染后不久进入控制台(因为它是异步的),但可观察对象没有捕捉到变化,它永远保持未定义。
我正在使用异步“标签”,但它没有解决任何问题。
我做了很多研究,但我不明白发生了什么,所以我希望有人能在这里帮助我。
如果我找到我的答案(无论多么愚蠢),我还是会在这里发布,所以我的帖子不会无用。
谢谢大家,希望大家不要太烦收到初学者的问题。
【问题讨论】:
-
我的猜测是你的 observable 不是有限的,因为它不是有限的,所以你没有得到任何结果。无论哪种方式,最好坚持使用
Observables和take(1)等运算符,而不是使用承诺。
标签: angular google-cloud-firestore promise observable