簡體   English   中英

將多個可觀察對象提取到已映射的流角rxjs中

[英]Extracting multiple observables into an already mapped stream angular rxjs

當前正在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"

但是我想在'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})
    )
}

嘗試這個。 mergeMap()運算符訂閱內部Observable,其結果是使用map()轉換為原始test1更新為test1 res

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM