【发布时间】:2021-01-06 05:46:40
【问题描述】:
我对 Angular 9 还很陌生,基本上我想知道如何从异步源返回对象数组?我目前有一个 firestore 查询,其中返回的文档有一个我希望呈现其数据的引用。
ngOnInit
this.currentUserRef.collection('links', ref => ref.where('pendingRequest', '==', false)).get()
.pipe(map(querySnap => {
const ret = [];
querySnap.forEach(doc => {
const val = doc.get('otherUser').get().then(userData => {return userData});
ret.push(val);
});
return ret;
})).subscribe(val => {
this.links = val;
});
HTML
<ion-item *ngFor="let link of links | async">
<ion-avatar slot="start">
<img [src]="getImage(link.get('profilepic'))">
</ion-avatar>
<ion-label>
<h2>{{link.get('name')}}</h2>
<p>{{link.get('bio')}}</p>
</ion-label>
<ion-checkbox id="{{link.id}}"></ion-checkbox>
</ion-item>
这当前返回错误:InvalidPipeArgument: '[object Promise]' for pipe 'AsyncPipe' 当我删除 HTML 中的异步管道时,它会返回 zoneawarepromise。
编辑
this.links = this.currentUserRef.collection('links', ref => ref.where('pendingRequest', '==', false)).get()
.pipe(map(querySnap => {
const ret = [];
querySnap.forEach(async doc => {
const val = await doc.get('otherUser').get().then(userData => {return userData});
ret.push(val);
});
return ret;
}));
这现在可行,但是我不知道该解决方案对于大量文档的效率和可扩展性如何,因为
ret 数组
注意:querySnap 是一个对象,它有一个内置的 forEach 方法来循环遍历它的 docs 属性中的数组。
【问题讨论】:
标签: angular google-cloud-firestore rxjs observable angular9