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 に答える