Mergemap Angular + firestore 集合

Posted

技术标签:

【中文标题】Mergemap Angular + firestore 集合【英文标题】:Mergemap Angular + firestore collection 【发布时间】:2019-08-07 09:21:09 【问题描述】:

我开始使用 angular,我需要帮助来解决这个问题。我正在使用 Firestore 数据库。

  getDiveSitesFrequentation(userId: string): void 
   this.getDives(userId)
    .pipe(map(dives => mergeMap(
     (dive: Dive) => this.diveSiteService.getDiveSite(dive.dive_site)
     .pipe(map(diveSite =>  return dive.number + ' ' + diveSite.name ))
     ))).subscribe(v => console.log(v))

我需要控制台日志返回一个包含潜水编号和潜水地点名称的字符串数组。

但此代码仅返回 mergemap 函数。

有人可以帮我解决这个问题吗?

提前致谢。

【问题讨论】:

this.diveSiteService.getDiveSite 是做什么的?它返回一个 Observable? 【参考方案1】:

你走在正确的道路上,我相信这会给你想要的:

  import  combineLatest  from 'rxjs';

  ...

  this.getDives(userId)
    .pipe(
      mergeMap(dives => 
        const diveSiteStringObservables = dives.map(
          (dive: Dive) => 
            return this.diveSiteService.getDiveSite(dive.dive_site)
              .pipe(
                map(diveSite => 
                  return dive.number + ' ' + diveSite.name;
                )
              );
          
        );
        return combineLatest(diveSiteStringObservables);
      )
    ).subscribe(v => console.log(v));

关键是使用 combineLatest() 将一个 Observables 数组组合成一个 Observable,返回一个 Array。

【讨论】:

你好@SnorreDan,谢谢你的回答。我试过你的代码,我收到以下错误:TypeError: "You provided 'undefined' where a stream was expected. You can provide an Observable, Promise, Array, or Iterable." 看起来我忘记在代码的第 10 行添加“return”,我现在已将行更新为“return this.diveSiteService.getDiveSite(dive.dive_site)”。希望它现在应该可以工作了。

以上是关于Mergemap Angular + firestore 集合的主要内容,如果未能解决你的问题,请参考以下文章

TypeError:readFile $(...).mergeMap不是firebase服务函数中的函数

理解 redux Epic 中的 mergeMap

markdown mergeMap

typescript mergeMap Rxjs嵌套请求

typescript mergeMap()运算符

在执行副作用之前等待来自 mergeMap 的所有 observables 完成