繁体   English   中英

如何在数组Angular中执行observable?

[英]how to execute observable in array Angular?

我有一个名为usersarray变量。 它包含用户 ID 元素。

users=[uid1, uid2, uid3];

我想映射这个array并像这样从Firestore获取用户信息:

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.

所以我的问题; 如何在array迭代中执行Observable

谢谢@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)))

您可以将您的 id 映射到一个可观察数组,并使用组合运算符 liek forkJoin 或 combineLatest 来执行它们。 订阅将为您带来一系列结果

userIds = [uid1, uid2, uid3];

userInfos$ = forkJoin(userIds.filter(Boolean).map(userId => this.afsService.doc(`user/{userId}`)));

userInfos$.subscribe(console.info);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM