2017-01-09 8 views
1

私は休暇のリストを持ち、それぞれにユーザIDが割り当てられています。検索したユーザーデータを各休日レコードにマージして、単一の観測値を返すようにしたいと思います。別のオブザーバブルのプロパティであるオブザーバブルをマージする方法

私はそれは私が私が観測userにアクセスするために苦労しています。この

{ 
    fromDate:'20/12/16', 
    toDate:'21/12/16', 
    user:Array[1] 
} 

のようなオブジェクトをしたいと思い、この

{ 
    fromDate:'20/12/16', 
    toDate:'21/12/16', 
    user:fireBaseObservable 
} 

のようなオブジェクトを返します。この関数に

getAllHolidaysAndUsers() { 

    return this.af.database.list('Holiday').mergeMap(items => { 
    for (let item of items) { 
     item.user = this.af.database.object(`/User/${item.userIdKey}`);   
    } 
    return items; 

}); 
} 

を作成単一のサブスクリプションで。現在、私は悪いフォームを知っているネストされたサブスクリプションをやっています。

私はこの

getHolidayInfo() { 
    return this.getHolidaysByUserId().mergeMap(hol => { 

    return this.UserList.getUserByEmail().map(user => { 
    return {hol:hol.date, user:user[0]} 
    }); 

}); 

のように働いて同様の例を得ることができた。しかし、私は最初の例ではitemsをループするために持っているので、それが唯一の最後の結果を返すので、この技術は

に動作していません

Here's the plunker

答えて

0

あなたはこのようにそれを行うことができます:

getAllHolidaysAndUsers() { 
    return this.holiday 
    .switchMap(items => Observable.from(items)) 
    .flatMap(item => { 
     return this.af.database.object(`/User/${item.userIdKey}`) 
      .map(user => { 
       item.user = user; 
       return item; 
      }); 
    }) 
    .toArray(); 
} 
+0

私は休日がfireBaseListObservableであることを示すために質問を更新しました。 swtichマップをfireBaseListObservableのflatMap(またはrxjs5のmergeMap)に置き換えた場合、問題の原因となっているuserIdKeyにtypescript alertというプロパティが存在しません。なぜ、ファイヤーベースマッピングが配列にマッピングされていないのですか? – Mangopop

+0

これはあなたのオブジェクトをどのように入力したかによって決まります。以下の '$ {item [" userIdKey "]}'を試すことができます - それが動作すれば、特定の場所で型を使用したり間違って設定することに問題があります。あなたが提供したコードでは、すべてのタイプを設定していないので、コードを見ずに言ってください – olsn

+0

私はプランナーを作って、このスペースを見ます! – Mangopop

関連する問題