1

对于用户数据,我有一个如下所示的发布/订阅:

Meteor.publish("allUserData", function () {
    return Meteor.users.find({}, {
            fields: { "emails": 1, "_id": 1, "profile": 1 }
        }
    );
});

Meteor.subscribe("allUserData");

但是,当我尝试阅读配置文件时,它总是未定义,直到我刷新页面,然后我才能阅读它。我正在尝试按如下方式阅读个人资料:

Meteor.user().profile

我究竟做错了什么?为什么刷新页面时它可以工作,但在初始加载时却不行?我已经在发布函数中尝试了带引号和不带引号的属性名称......

4

1 回答 1

2

Meteor.user().profile 在 Meteor.user() 之后的几分之一秒后才可用。此外,当创建用户帐户时,它没有配置文件。解决方案是在反应函数中使用超时。

Meteor.autorun(function(handle) {
  if (Meteor.user()) {
    if (Meteor.user().profile) {
      // use profile
      handle.stop()
    }
    else {
      setTimeout(function(){
        if (!Meteor.user().profile) {
          // new user - first time signing in
          Meteor.users.update(Meteor.userId(), {
            $set: {
              'profile.some_attribute': some_value
            }
          })
        }
      }, 2000)
    }
  }
})
于 2013-02-13T13:32:56.500 回答