Javascript api调用返回未定义的Meteor方法

Javascript api调用返回未定义的Meteor方法,javascript,meteor,geocoding,Javascript,Meteor,Geocoding,我使用的是Meteor,每当我调用Google geocode的api并试图从中返回值时,我都会得到一个未定义的值,我使用的是api的回调,因此那里肯定有数据,所以我不确定是什么导致了它 callWeather = e => { e.preventDefault(); console.log(this.state.address); Meteor.call("geCoordinates", this.state.address, function(err, result) {

我使用的是Meteor,每当我调用Google geocode的api并试图从中返回值时,我都会得到一个未定义的值,我使用的是api的回调,因此那里肯定有数据,所以我不确定是什么导致了它

callWeather = e => {
  e.preventDefault();
  console.log(this.state.address);
  Meteor.call("geCoordinates", this.state.address, function(err, result) {
    if (err) {
      console.log(err);
    } else {
      console.log(result);
    }
  });
};

geCoordinates(address) {
  googleMapsClient.geocode({ address }, (error, data) => {
    if (error) {
      console.log(error);
    } else {
      console.log(data.json.results[0].geometry.location.lat);
      return data.json.results[0].geometry.location.lat;
    }
  });
},

这是大多数人在开始工作时经常犯的错误。这里的问题是,在方法代码执行回调函数之前,客户机中存在数据响应。这方面有很多解决方案:

  • 但是,我建议您使用以下方法:

    let getGeoCode = Meteor.wrapAsync(googleMapsClient.geocode, googleMapsClient.geocode),
    data = getGeoCode({ address });  // data contains data of your callback
    

    为什么需要在服务器方法上调用
    googleMapsClient
    ,然后将结果返回给客户端?为什么不直接从客户端调用它呢?每当我试图从客户端调用它时,它都会抛出一个错误,说内容类型未定义,访问控制允许源标题无效。这非常特殊。也许你会在你的帖子中添加你在客户端上尝试过的内容和出现的错误,并用谷歌地图api或类似的东西标记你的帖子,这样一些谷歌地图api专家找到你的帖子的几率就更高了。我认为客户端调用是正确的,您应该专注于解决客户端上的错误,而不是切换到服务器。除此之外,这是一个有效的答案,我建议使用客户端来解决此问题以节省服务器资源(假设10000个客户端使用服务器向google maps api请求,然后处理数据,然后发送回cleints)@Jankapunkt是的,我同意这个问题的解决方案可以通过您的方法来解决,这样做是有好处的。我刚刚给出了在任何其他异步进程中可能遇到的问题的解决方案。您好,谢谢您的回答,我以前尝试过使用wrapAsync,但实现错误,我将尝试使用@Jankapunkt从客户端打电话的想法,我认为从服务器打电话是做事情的正确方式,但你绝对是对的,谢谢你的帮助,但是你告诉我从服务器打电话的方式也非常有效