作者:IQBB_LongGang | 来源:互联网 | 2023-08-29 19:40
我有一个名为array
的{{1}}变量。它包含用户id元素。
users
我想映射此users=[uid1,uid2,uid3];
并像这样从 Firestore 获取用户信息:
array
当此代码有效时,出现此错误:
let userInfo;
userInfo = users.map((element:any) => {
if (element){
this.afsService.doc(`user/${element}`).subscribe(user => {
return {...user}
});
}
...
所以我的问题;如何在You provided 'undefined' where a stream was expected. You can provide an Observable,Promise,Array,or Iterable.
中执行Observable
迭代?
您可以将您的ID映射到可观察的数组,并使用组合运算符liek forkJoin或CombineLatest执行它们。订阅将为您带来一系列结果
userIds = [uid1,uid2,uid3];
userInfos$ = forkJoin(userIds.filter(Boolean).map(userId => this.afsService.doc(`user/{userId}`)));
userInfos$.subscribe(console.info);
,
感谢@Moxxi我可以在帮助下运行代码。这是我的代码; forkJoin无法正常工作,因此我使用CombineLatest代替了它。 anf filter(Boolean)与管道一起使用。
this.usersInfo$= combineLatest(
users.map((user:any)=>this.afs.doc(`users/${user.uid}`).valueChanges()
)).pipe(map(x=>x.filter(Boolean)))