我需要遍历两个集合,首先获取用户组,然后遍历每个组并获取与该组关联的作业。效果很好,但是问题是,如果没有作业,应用程序将保持加载状态。
这是我的代码:
this.fb
.getUsersGroupsAsObservable(user.uid, groupType) // first get the users groups
.subscribe(groups => {
combineLatest( // for each group get the jobs belonging to that group
groups.map(group => this.fb.getJobsbyGroup(group.id)),
).subscribe(res => { // if there is no results this wont execute
this.jobs = [].concat.apply([], res);
});
});
理想情况下,如果我可以确定getJobsbyGroup不返回任何结果并返回一个空数组,那将是很好的。抱歉,如果措辞不好,我对这种情况下所需的术语并不完全自信。
答案 0 :(得分:0)
您可以检查这是否是您想要的吗? link。
这是要点。您可以检查this.fb.getJobsbyGroup
是否有结果,然后返回结果,否则返回未定义。
this.fb.getUsersGroupsAsObservable(user.uid, groupType)
.pipe(map(groups => groups.map(group => group.id)),
switchMap(groupIds => from(groupIds).pipe(mergeMap(id => this.fb.getJobsbyGroup(id).pipe(map(jobs => jobs ? jobs : []))),toArray())))
.subscribe()
代码说明:从这些组中,将groupId隔离到单独的数组中。然后并发调用getJobsbyGroup
并检查结果是否存在或返回空数组。然后将其结果合并到一个单独的数组中并返回它。让我知道您是否需要这个。