使用AngularFire2和Firebase获取联接数据时出错
我的数据库由两个“表”组成,其中包含消息和用户,消息的senderID与用户ID匹配。在获取数据时,我使用以下代码将这两个连接在一起使用AngularFire2和Firebase获取联接数据时出错,angular,firebase,firebase-realtime-database,ionic2,angularfire2,Angular,Firebase,Firebase Realtime Database,Ionic2,Angularfire2,我的数据库由两个“表”组成,其中包含消息和用户,消息的senderID与用户ID匹配。在获取数据时,我使用以下代码将这两个连接在一起 this.messages = this.af.database.list(`/messages/1`) .map(messages => { messages.map(message => { this.af.database.object('users/' + message.sender)
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}
时,它给了我以下类型错误:无法读取未定义的属性“provider”
感谢您的建议。您不能依赖于正在填充的message.userdata。您正在进行一个异步调用,以从服务器获取数据,但不等待在呈现UI之前下载所有用户
另外,您应该考虑用户可能不存在的情况。因此,如果不首先尝试
item.userdata?
,您将无法使用{{item.userdata.provider.displayName}}
我想有更好的方法来解决这个问题,比如创建一个
item.getUserName()
方法,它可以更透明、更优雅地处理这些实现细节。请原谅我的无知,但是messages.map
是否不返回映射值?您似乎没有返回该消息,而是返回原始消息对象。