节点Google地理编码器回调无效

时间:2016-01-26 22:09:12

标签: javascript node.js callback google-geocoder

以下是我正在使用的内容: getLocation('123 Foobar Ln');

function getLocation(location) {
  console.log(location); // prints 123 Foobar Ln
  getLocationData(location, function(gotLocation) {
    console.log('hello?'); // this doesn't print
    return gotLocation;
  });
}

function getLocationData(location, callback) {
  geocoder.geocode(location, function(err, res) {
    if (res[0] != undefined) {
      geoaddress = (res[0].formattedAddress);
      addressmessage = 'Formatted Address: ' + geoaddress;
      callback(addressmessage);

    } else {
      geocoder.geocode(cleanedAddress, function(err, res) {
        addressmessage = 'null';
        if (res[0] != undefined) {
          geoaddress = (res[0].formattedAddress);
          addressmessage = 'Formatted Address: ' + geoaddress;
          callback(addressmessage);
        } else {
          addressmessage = 'Address could not be found: ' + location;
          callback(addressmessage);

        }
      });
    }
  });
}

我很难让getLocation对来自getLocationData的回调做任何事情。

我运行以下内容时获得的唯一输出是:123 Foobar Ln

有人能指出我在这里做错了吗?

1 个答案:

答案 0 :(得分:0)

这里最让你失望的错误可能是你正在搜索0的索引resres是一个对象。现在你的回调使用已经修复,除了

之外,这是唯一剩下的问题
  1. cleanedaddress尚未定义,但我只是理所当然地认为它必须位于代码中更高的位置。
  2. 123 Foobar Lane是一个可能不存在的地址,但也许您只是将其用于帖子。
  3. 简化的工作版本:

    var geocoder = require('google-geocoding');
    //https://www.npmjs.com/package/google-geocoding
    
    function getLocation(location) {
      getLocationData(location, function(latLong) {
        console.log('latLong:', latLong);
      });
    }
    
    function getLocationData(location, callback) {
      geocoder.geocode(location, function(err, res) {
        if (err){
          console.log('geocode error', err);
        }else{
          callback(res);
        }
      });
    }
    
    getLocation('1060 W Addison St, Chicago, IL 60613');
    
    // => latLong: { lat: 41.9474536, lng: -87.6561341 }
    

    希望这有帮助。