[英]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.