编程语言
首页 > 编程语言> > javascript – 使用Google Geocode的回调函数

javascript – 使用Google Geocode的回调函数

作者:互联网

我几个小时以来一直在努力解决这个问题,即使在阅读Stack上的几个例子之后我也无法实现这一点.我是JS的新手并没有帮助.

我正在尝试从Google Geocoder API检索有关地址的信息,然后将该对象传递给另一个函数.根据我的阅读,我理解我用来检索信息的函数是异步的,因此我需要使用回调函数来读取它.但是,当我尝试这样做时,我的控制台仍然会返回“未定义”.我知道这些信息来自Google,因为当我在结果对象上使用console.log()时它会正确返回.

无论如何,这是我正在使用的:

function onSuccess(position) {
  getLocationData(position, function(locationData) {
    console.log(locationData);
  });   
}

function getLocationData(position, callback) {
  geocoder = new google.maps.Geocoder();
  var location = 'Billings,MT';

  if( geocoder ) {
    geocoder.geocode({ 'address': location }, function (results, status) {
      if( status == google.maps.GeocoderStatus.OK ) {
        return results[0];
      }
    });
  }
  callback();
}

就像我提到的那样,我得到的只是’未定义’.如果我将’console.log(results [0])’放在getLocationData()返回上方,则返回的对象是正确的.任何帮助将非常感激.

解决方法:

您的问题是,您没有将回调连接到返回.由于geocode()函数本身已经是异步的,因此返回没有任何影响.相反,您必须将您在此处返回的值直接传递给回调函数.像这样:

function getLocationData(position, callback) {
  geocoder = new google.maps.Geocoder();
  var location = 'Billings,MT';

  if( geocoder ) {
    geocoder.geocode({ 'address': location }, function (results, status) {
      if( status == google.maps.GeocoderStatus.OK ) {
        callback(results[0]);
      }
    });
  }
}

标签:javascript,function,ajax,asynchronous,geocoding
来源: https://codeday.me/bug/20190722/1508126.html