AngularFire Rxjs订阅-返回零结果

时间:2019-06-05 08:14:44

标签: rxjs google-cloud-firestore angularfire2

我需要遍历两个集合,首先获取用户组,然后遍历每个组并获取与该组关联的作业。效果很好,但是问题是,如果没有作业,应用程序将保持加载状态。

这是我的代码:

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不返回任何结果并返回一个空数组,那将是很好的。抱歉,如果措辞不好,我对这种情况下所需的术语并不完全自信。

1 个答案:

答案 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并检查结果是否存在或返回空数组。然后将其结果合并到一个单独的数组中并返回它。让我知道您是否需要这个。