2017-06-21 4 views
0

現在、FirebaseとAngular 4でプロジェクトをビルドしています。データの多くのキーと多くの異なるuidキーを含むデータオブジェクトを取得しています。すでにマッピングされているストリームに複数の観測値を抽出する角度rxjs

データをいくらか管理しやすいように、私はオブジェクトデータをホストで変更できるいくつかのキーの中に保存したくありません。

私は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}) 
    ) 
} 

答えて

2

になってしまった相続人は何がこれを試してみてください。 mergeMap()オペレータは、結果がmap()を使用して元のrestest1に更新したObservableにサブスクライブします。

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

これは素晴らしいニュースです。 – 22Ryann

+0

2つ以上のUIDのオブジェクトがあった場合、どうすればよいでしょうか?鍵で ループして抽出するには? – 22Ryann

関連する問題