这一定是我学习Firebase时遇到的顶空错误。我要做的就是根据没有文档ID时包含的值获取文档(如果存在)
myCollection / [某些ID] / myField:myValue
我正在尝试使用ValueChanges遍历可观察对象,并查看基于where子句的文档是否存在。我做得到了我要查找的文档,但是我实际上无法使用它,因为当我遍历可观察对象中的数组时,它似乎永远不会返回。我可以将项目记录到控制台,但是在循环之后永远不会得到结果:
var colRef: AngularFirestoreCollection<MyType>;
var obs$: Observable<MyType[]>;
colRef = this.afs.collection<MyType>('myCollection', ref => {
return ref.where('myField', '==', 'myValue');
});
obs$ = colRef.valueChanges();
var result = obs$.forEach(x =>
{
var item = x[0];
// get here OK
console.log(`item = ${JSON.stringify(item)}`)
return item;
})
// never get here
console.log(`result = ${JSON.stringify(result)}`)
我想念什么?还是更大的问题是,我是否正确地解决了这个问题?似乎要四处奔波以获取文档...
感谢您的帮助!
答案 0 :(得分:0)
您需要将代码更改为
var colRef: AngularFirestoreCollection<MyType>;
var obs$: Observable<MyType[]>;
colRef = this.afs.collection<MyType>('myCollection', ref => {
return ref.where('myField', '==', 'myValue');
});
obs$ = colRef.valueChanges();
obs$.subscribe((x: MyType[]) =>
{
console.log(x);
});
请注意,这是一个async
操作,您将其视为sync
操作