所以我试图调用谷歌地理编码器来获取一些值,但我不完全理解我能在异步函数领域内做什么和不能做什么。在SO上还有另一个例子帮助我这样设置,但我仍然无法弄清楚如何将这些值放入数组中
以下是我对地理编码器的调用:
function getLng(name,func){
geocoder.geocode( {'address': name}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
func(results[0].geometry.location.lng());
} else {
alert("Something got wrong " + status);
}
});
}
这是使用地理编码器值构建数组:
('.action').click(funciton(){
var homes =[];
homes.push({name: Name,
type: "dwelling",
lat: getLat(Name, function(location){return location;}),
lng: getLng(Name, function(location){return location;})
});
console.log(homes);
});
真诚地感谢您的帮助......非常感谢。
答案 0 :(得分:0)
异步函数不会立即返回结果,它们通常通过发出事件,将回调作为参数传递或返回promise对象来工作。 在您的示例中,您将传递一个回调,该回调将其参数返回到void。
此外,您不希望为同一地址调用地理编码器API两次。
声明的更好的功能是:
function getGeoLocation(address, onDoneCallback) { ... }
...
var homes = [];
getGeoLocation(some_address, function(loc) {
homes.push({lat : loc.lat, lng : loc.lng});
});
希望这有帮助。
答案 1 :(得分:0)
使用async
方法意味着重新思考如何对事件进行编码。使用async意味着代码永远不会等待方法完成,而是立即向前移动到下一行。这意味着您必须将分配代码(homes = ...
)移动到成功处理程序
请注意,click事件现在仅限于调用getGeoCoords
函数。
此函数现在有一个名为onSuccess
的回调方法,它负责根据异步查询的结果构建homes
对象
var homes = [];
('.action').click(function(){
getGeoCoords(Name, 'dwelling');
});
function getGeoCoords(name, type){
var onSuccess = function(results){
var home = {};
home.name = name; // getGeoCoods parameter 'name'
home.type = type; // getGeoCoods parameter 'type'
home.lat = results.lat; // result of async query
home.lng = results.lng; // result of async query
homes.push(home); // push object to global array
}
geocoder.geocode(
{'address': name}, // async query options
onSuccess // success callback
);
}