【问题标题】:Mergemap Angular + firestore collectionMergemap Angular + firestore 集合
【发布时间】: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?

标签: typescript firebase rxjs google-cloud-firestore 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)”。希望它现在应该可以工作了。
猜你喜欢
  • 2019-06-27
  • 2019-08-13
  • 2018-05-11
  • 1970-01-01
  • 2018-08-01
  • 2018-10-08
  • 2018-05-15
  • 1970-01-01
  • 2020-04-15
相关资源
最近更新 更多