Observable 不会退出 foreach?
Observable won't exit foreach?
这一定是我在学习 Firebase 时犯下的 space 错误。我想要做的就是获取一个文档(如果它存在),基于它在我没有文档 ID 时包含的值:
myCollection/[some id]/myField:myValue
我正在尝试使用 ValueChanges 遍历可观察对象,并根据 where 子句查看文档是否存在。我 do 得到了我正在寻找的文档,但实际上我无法使用它,因为当我遍历可观察对象中的数组时,它似乎永远不会 return。我可以将项目记录到控制台,但在循环后永远不会得到结果:
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)}`)
我错过了什么?或者更大的问题是,我是否正确地处理了这个问题?似乎有很多人 运行 都在忙着拿一份文件...
感谢您的帮助!
您需要将代码更改为
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
操作
这一定是我在学习 Firebase 时犯下的 space 错误。我想要做的就是获取一个文档(如果它存在),基于它在我没有文档 ID 时包含的值:
myCollection/[some id]/myField:myValue
我正在尝试使用 ValueChanges 遍历可观察对象,并根据 where 子句查看文档是否存在。我 do 得到了我正在寻找的文档,但实际上我无法使用它,因为当我遍历可观察对象中的数组时,它似乎永远不会 return。我可以将项目记录到控制台,但在循环后永远不会得到结果:
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)}`)
我错过了什么?或者更大的问题是,我是否正确地处理了这个问题?似乎有很多人 运行 都在忙着拿一份文件...
感谢您的帮助!
您需要将代码更改为
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
操作