【问题标题】:Extracting multiple observables into an already mapped stream angular rxjs将多个 observables 提取到已经映射的流中 angular rxjs
【发布时间】:2017-06-21 11:53:14
【问题描述】:

目前在 Firebase 和 Angular 4 中构建一个项目。我正在提取一个数据对象,其中包含许多数据键和许多不同的 uid 键。

为了使数据在某种程度上易于管理,我不想将对象数据保存在可以在主机上更改的某些键中。

在我存储了 uid 的情况下,我想为提取的 observable 创建一个新键。我可以轻松地将其添加为映射对象内的可观察对象,但我想在流期间将可观察对象实际提取到对象中。这是我目前拥有的:

 this.ss.data()
  .map(res => {
    res['test1'] = this.fb.serie(res['serieUid']).map(res => res)
    return res
  })
  .subscribe(res => {
    console.log(res)
  })

  Result -
    serieUid:"-Kk1FeElvKMFcyrhQP4T"
    state:"Tennessee"
    test1:FirebaseObjectObservable
    timezone:"US/Eastern"

但我希望将提取的 observable 包含在“test1”中,我已经失败了几个小时并且很困惑。有不止一个 uid 实例,所以这必须发生多次。然后订阅。

以下回答后跟进:

这就是我在最终函数中得到的结果

getRound(roundUid: string) {

  /**
    Retrieves a round based simply on the uid
    supplied.
  **/

  return this.fb.round(roundUid)
    .mergeMap(round => // Get Serie Data
      this.fb.serie(round['serieUid']).map(serie => {round['serie'] = this.cs.cleanForFb(serie); return round})
    )
    .mergeMap(round => // Get Type Data
      this.fb.type(round['typeUid']).map(type => {round['type'] = this.cs.cleanForFb(type); return round})
    )
    .mergeMap(round => // Get sx Coast Data
      this.fb.coast(round['sxCoastUid']).map(sxCoast => {round['sxCoast'] = this.cs.cleanForFb(sxCoast); return round})
    )
}

【问题讨论】:

    标签: javascript angular rxjs observable angular2-observables


    【解决方案1】:

    试试这个。 mergeMap() 操作符订阅了内部 Observable,其结果是使用 map() 变成原来的 res 更新为 test1

    this.ss.data()
      .mergeMap(res => this.fb.serie(res['serieUid'])
        .map(innerRes => {
          res['test1'] = innerRes;
          return res;
        })
      )
      .subscribe(res => {
        console.log(res)
      })
    

    【讨论】:

    • 如果我有一个包含两个或多个 UID 的对象,我该怎么做?在一个关键。遍历它们并提取它们?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-10
    • 1970-01-01
    • 1970-01-01
    • 2017-06-22
    • 1970-01-01
    • 2021-08-28
    相关资源
    最近更新 更多