首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从Node.js上的google地理编码API返回结果

如何从Node.js上的google地理编码API返回结果
EN

Stack Overflow用户
提问于 2017-12-20 13:56:08
回答 2查看 1K关注 0票数 0

我正在尝试创建一个函数,该函数使用google geocoding API for node.js来创建一个名为geodata的变量并返回它。由于某些原因,temp的值将会得到我想要的结果,但是如果我在函数外部使用i,temp的值是未定义的。

代码语言:javascript
运行
复制
var temp;
function getInfo(inAddress){
  googleMapsClient.geocode({
    address: inAddress,
    region: 'MY'
  }, function(err, response) {
    if (!err) {
      details = response.json.results;
      var geodata = {
        "status": response.json.status,
        "formattedAddress": details[0].formatted_address,
        "latitude": details[0].geometry.location.lat,
        "longitude": details[0].geometry.location.lng,
        "type": details[0].geometry.location_type,
      };
      for(i=0; details[0].address_components.length; i++){
        if(details[0].address_components[i].types == "postal_code"){
          geodata.postCode = details[0].address_components[i].long_name;
        }
        temp = geodata
        console.log(temp); 
      }
    }
  });
}

getInfo('Nadayu28');
EN

回答 2

Stack Overflow用户

发布于 2017-12-20 18:07:46

您的函数应该是异步的,您可以使用promises或async/await来实现它,如下所示:

代码语言:javascript
运行
复制
const Promise=require('bluebird');

async function getInfo(inAddress){
  return Promise.promisify(googleMapsClient.geocode)({
    address: inAddress,
    region: 'MY'
  }).then((response)=> {
      details = response.json.results;
      var geodata = {
        "status": response.json.status,
        "formattedAddress": details[0].formatted_address,
        "latitude": details[0].geometry.location.lat,
        "longitude": details[0].geometry.location.lng,
        "type": details[0].geometry.location_type,
      };
      for(i=0; details[0].address_components.length; i++){
        if(details[0].address_components[i].types == "postal_code"){
          geodata.postCode = details[0].address_components[i].long_name;
        }
        return geodata;
      }
    }
  });
}

const data = await getInfo('Nadayu28');
票数 0
EN

Stack Overflow用户

发布于 2018-01-31 17:26:45

您可以使用一个简单的回调来使其工作。我还修复了一些bug。以下是您的代码的工作版本。

代码语言:javascript
运行
复制
var googleMapsClient = require('@google/maps').createClient({
    key: 'Your Key'
});

function getInfo(inAddress, callback) {
    googleMapsClient.geocode({
        address: inAddress,
        region: 'MY'
    }, function(err, response) {
        if (!err) {
            details = response.json.results;
            var geodata = {
                "status": response.json.status,
                "formattedAddress": details[0].formatted_address,
                "latitude": details[0].geometry.location.lat,
                "longitude": details[0].geometry.location.lng,
                "type": details[0].geometry.location_type,
            };
            for (i = 0; i < details[0].address_components.length; i++) {
                if (details[0].address_components[i].types.indexOf("postal_code") !== -1) {
                    geodata.postCode = details[0].address_components[i].long_name;
                }
            }

            callback(null, geodata);
        } else {
            callback(err, null);
        }
    });
}

getInfo('Nadayu28', function(err, response) {
    if (err) {
        console.error(err);
    } else {
        console.log(response);
    }
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47899630

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档