Meteor用户配置文件只能在刷新后读取

时间:2013-02-13 06:15:50

标签: meteor

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

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

Meteor.subscribe("allUserData");

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

Meteor.user().profile

我做错了什么?为什么在刷新页面时它会起作用,而在初始加载时却不起作用?我已尝试使用和不带引号的发布函数中的属性名称...

1 个答案:

答案 0 :(得分:2)

Meteor.user()。配置文件在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)
    }
  }
})