从HTTP.get访问变量

时间:2015-07-29 23:28:14

标签: javascript meteor scope

我正在尝试在Meteor Accounts.onCreateUser用户创建功能中访问名为city的变量,并且在尝试这样做时没有成功。我试图在HTTP.get调用结束时返回city,并尝试在HTTP.get之外创建city var,只是设置city而不使用var,但这些东西似乎都没有用。当console.log(city)运行时,它会准确输出所需的信息,因此这个变量不能成为问题。如果我犯了一个错误,请原谅我。

Accounts.onCreateUser( function (options, user) {

if (options.profile) {

  options.profile.picturelrg = "http://graph.facebook.com/" + user.services.facebook.id + "/picture/?type=large";
  user.profile = options.profile;
  options.profile.picturesm = "http://graph.facebook.com/" + user.services.facebook.id + "/picture/?type=small";
  options.profile.messenger = "https://www.messenger.com/t/" + user.services.facebook.id;


 HTTP.get("http://ipinfo.io", function (error, result) {
    var place = JSON.parse(result.content);
    var city = place.city;
    console.log(city);

  });


  options.profile.city = city;


}

  return user;

});

1 个答案:

答案 0 :(得分:0)

技术上对此的正确设置是您需要使用HTTP.get的同步版本。有关示例,请参阅docsthis question

然而,还有一个更基本的问题:您尝试获取用户的位置数据,但onCreateUser仅在服务器上运行。因此,即使您确实解决了这个问题,您也会在每个用户的个人资料中获得相同的数据。您需要在客户端上运行get并通过方法进行更新。尝试这样的事情:

Accounts.createUser(options, function(err) {
  if (!err) {
    HTTP.get(..., function(err, result) {
      var city = ...;
      var place = ...;
      Meteor.call('updateProfileWithCityandPlace', city, place);
    });
  }
});

Meteor.methods({
  updateProfileWithCityandPlace: function(city, place) {
    check(city, String);
    check(place, String);

    Meteor.users.update(this.userId, {
      $set: {'profile.city': city, 'profile.place': place}
    });
  }
});