我在AngularFire的Angular项目中收到“循环对象值”错误。我是Firebase的新手,所以也许有一个简单的解决方法,但是我找不到。
首先,我在Firestore DB中查询一个集合,后来我试图从第一个中查询具有文档ID的另一个集合。
这是相关代码:
foo.service.ts:
async checkOrgas() {
let orga: any;
const user = await this.afAuth.currentUser;
const results = this.db
.collection('orgas', (ref) => {
return ref.where('createdBy', '==', user.uid);
})
.valueChanges({ idField: 'orgaID' })
.pipe(take(1));
return results;
}
async getOrgaBankings(orgaID: string) {
const results = this.db.collection('bankings', (ref) => {
return ref.where('orga', '==', orgaID);
}).valueChanges({ idField: 'bankingID' });
return results;
}
foo.component.ts:
async getOrga() {
const orgas = await this.orgaService.checkOrgas();
this.orgasSubscription = orgas.subscribe((val) => {
this.orga = val[0];
val.length > 0 ? (this.memberOfOrga = true) : (this.memberOfOrga = false);
}
async loadOrgaBankingInfo() {
this.orgaBanking = this.orgaService.getOrgaBankings(this.orga.orgaID);
}
Firefox中的确切错误是
错误类型错误:“循环对象值”
我对错误的含义有基本的了解,但是即使有了这些知识,我仍然不知道如何正确解决它。
如果有人遇到类似问题,这就是答案!
我确实解决了这个问题,首先,该组件的HTML中的JSON管道导致了错误。
问题出在以下功能中:
async loadOrgaBankingInfo() {
this.orgaBanking = this.orgaService.getOrgaBankings(this.orga.orgaID);
}
我忘了订阅getOrgaBankings(),因此,我在可观察对象而不是数组上使用了JSON Pipe。
重构函数后,所有功能均按预期工作:
async loadOrgaBankingInfo() {
this.orgasSubscription.unsubscribe();
const orgaBanking = await this.orgaService.loadOrgaBankings(
this.orga.orgaID
);
orgaBanking.subscribe((val) => {
console.log(val);
});
}