2016-09-10 1 views
1

내 데이터베이스는 메시지와 사용자가있는 두 개의 '테이블'로 구성되며 메시지에는 사용자 ID와 일치하는 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

을 제공하지만,이 두 가지를 결합하려면 다음 코드를 사용하고

감사합니다.

+1

내 용서를 용서하지만'messages.map'는 매핑 된 값을 반환하지 않습니까? 당신은 그 메시지를 반환하는 것처럼 보이지 않고 오리지널 메시지 객체만을 반환합니다. – Kato

답변

1

채워지는 message.userdata에 의존 할 수 없습니다. 서버에서 데이터를 가져 오기 위해 비동기 호출을하고 있지만 사용자 인터페이스를 렌더링하기 전에 모든 사용자가 다운로드 될 때까지 기다리지는 않습니다.

또한 사용자가 존재하지 않을 수도 있습니다. 따라서 최소한 item.userdata?을 시도하지 않고 {{item.userdata.provider.displayName}}을 사용할 수 없습니다.

이러한 구현 정보를 좀 더 투명하고 우아하게 처리 할 수있는 item.getUserName() 메서드를 만드는 것과 같이 훨씬 더 좋은 방법이 있다고 생각합니다.