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); } });