node.js,不能从内部函数得到返回结果
我已经使用地理编码器模块完成了这个function,从几个纬度/经度获取城市:
// Get city from lat/long pair function getCityFromCoordinates(lat, long){ return geocoder.reverseGeocode(lat,long, function ( err, data ) { var city = "-"; if(err){ city = err.message; } else { if(data["results"].length == 0){ city = "not found"; } else { city = ""; var first_item = data["results"][0]; var address_components = first_item["address_components"]; for (var i=0; i<address_components.length;i++){ var current = address_components[i]; var types = current["types"]; for (var j=0;j<types.length;j++){ var type = types[j]; if((type == "locality") && (city == "")){ city = current["long_name"]; } } } } } console.log("City:" + city); return city; }); }
当我从另一个地方调用这个函数时,它正确地检索城市(我在日志中看到这个),但是它不返回值。 我相信这是链接到geocoder.reserverGeocode函数embedded我的function,但我不能解决这个问题。
geocoder.reverseGeocode
是asynchronous的,这意味着你不能从callback中return
结果。 尝试这样的事情:
function getCityFromCoordinates(lat, long, cb){ return geocoder.reverseGeocode(lat,long, function ( err, data ) { var city = "-"; if(err){ return cb(err.message); } else { if(data["results"].length == 0){ return cb("not found"); } else { city = ""; var first_item = data["results"][0]; var address_components = first_item["address_components"]; for (var i=0; i<address_components.length;i++){ var current = address_components[i]; var types = current["types"]; for (var j=0;j<types.length;j++){ var type = types[j]; if((type == "locality") && (city == "")){ city = current["long_name"]; } } } } } console.log("City:" + city); cb(null, city); }); }
现在,您可以在代码中使用它:
getCityFromCoordinates(lat, long, function(err, city) { if (err) { console.log('error: '+err); } else { console.log('result: '+city); } });