我正在尝试创建一个函数,该函数使用google geocoding API for node.js来创建一个名为geodata的变量并返回它。由于某些原因,temp的值将会得到我想要的结果,但是如果我在函数外部使用i,temp的值是未定义的。
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');
发布于 2017-12-20 18:07:46
您的函数应该是异步的,您可以使用promises或async/await来实现它,如下所示:
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');
发布于 2018-01-31 17:26:45
您可以使用一个简单的回调来使其工作。我还修复了一些bug。以下是您的代码的工作版本。
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);
}
});
https://stackoverflow.com/questions/47899630
复制相似问题