2016-09-10 5 views
1

私のデータベースは、メッセージとユーザーの2つの 'テーブル'で構成され、メッセージにはuserIDと一致するsenderIDがあります。メッセージのAngularFire2とFirebaseで結合データを取得する際にエラーが発生しました

this.messages = this.af.database.list(`/messages/1`) 
    .map(messages => { 
     messages.map(message => { 
     this.af.database.object('users/' + message.sender) 
      .subscribe(user => { 
      message.userdata = user; 
      console.log(message); 
      }); 
     return message; 
     }); 
     return messages; 
    }); 

にconsole.logは私が後だ構造を示しているデータをフェッチするとき、私は私が{{item.userdata.provider.displayName}}を使用する場合、それは私に次のようTypeError: Cannot read property 'provider' of undefined

を与える、しかし、一緒にこれらの2を結合するために、次のコードを使用しています

ありがとうございます。

+1

私の無知を許しますが、 'messages.map'はマップされた値を返しませんか?あなたはそれを返すようではなく、元のメッセージオブジェクトだけを返すように見えます。 – Kato

答えて

1

message.userdataに入力することはできません。サーバーからデータを取得するための非同期呼び出しを行っていますが、UIを表示する前にすべてのユーザーがダウンロードされるのを待つことはありません。

また、ユーザーが存在しない場合も考慮する必要があります。だから少なくともitem.userdata?を試していなければ{{item.userdata.provider.displayName}}を使用することはできません。

私は、これらの実装の詳細をもう少し透明かつエレガントに処理できるitem.getUserName()メソッドを作成するなど、これについてもっと良い方法があると思います。