1

我的数据库由两个包含消息和用户的“表”组成,消息的发件人ID 与用户ID 匹配。获取数据时,我使用以下代码将这两者连接在一起

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

感谢您的建议。

4

1 回答 1

1

您不能依赖 message.userdata 被填充。您正在进行异步调用以从服务器获取数据,但在呈现您的 UI 之前并未等待下载所有用户。

此外,您应该考虑用户可能不存在的情况。{{item.userdata.provider.displayName}}因此,如果不先尝试,您将无法使用item.userdata?

我猜想有一个更好的方法来解决这个问题,例如创建一个item.getUserName()可以更透明和优雅地处理这些实现细节的方法。

于 2016-09-12T00:06:31.573 回答