Javascript 等待提升服务请求回调
我正在尝试用GoogleMapAPI构建一个小应用程序,因为这是我的第一个javascript应用程序(我已经知道这种语言,但我几乎从未使用过),所以我遇到了一个小问题 我试图使用ElevationService获取与标记相关的高程,以便将两个数据({marker,elevation})推送到一个数组中。但是,在调用Javascript 等待提升服务请求回调,javascript,google-maps,google-maps-api-3,Javascript,Google Maps,Google Maps Api 3,我正在尝试用GoogleMapAPI构建一个小应用程序,因为这是我的第一个javascript应用程序(我已经知道这种语言,但我几乎从未使用过),所以我遇到了一个小问题 我试图使用ElevationService获取与标记相关的高程,以便将两个数据({marker,elevation})推送到一个数组中。但是,在调用getElevationForLocations的回调函数之前,我将数据推送到数组中的那一行被命中,导致推送未定义的数据(高程) 我想我应该使用一个异步函数,以便在推送数据之前等待回
getElevationForLocations
的回调函数之前,我将数据推送到数组中的那一行被命中,导致推送未定义的数据(高程)
我想我应该使用一个异步函数,以便在推送数据之前等待回调执行,但我不知道如何使用它
有人能给我一些指示吗
非常感谢,
梅塔
附言:这是我的剧本
var markers = [];
function initMap()
{
var map = new google.maps.Map(document.getElementById('map'), {
zoom: 4,
center: {lat: -25.363882, lng: 131.044922 },
mapTypeId: 'terrain'
});
var elevator = new google.maps.ElevationService;
map.addListener('click', function(e) {
addMarker(e.latLng, map, elevator);
});
}
function getElevation(location, elevator) {
var elevation;
// Initiate the location request
elevator.getElevationForLocations({
'locations': [location]
}, function(results, status)
{
if (status === 'OK') {
// Retrieve the first result
if (results[0]) {
return results[0].elevation;
}
}
});
}
function placeMarkerAndPanTo(latLng, map) {
var marker = new google.maps.Marker({
position: latLng,
map: map
});
map.panTo(latLng);
return marker;
//markers.push(marker);
}
function addMarker(location, map, elevator)
{ var marker = placeMarkerAndPanTo(location, map);
var elevation = getElevation(location, elevator);
markers.push({marker, elevation});
}
下面是代码的简化版本,使用了我在注释中描述的内容
var标记=[];
var电梯=新的google.maps.ElevationService;
var映射;
函数initMap(){
map=new google.maps.map(document.getElementById('map'){
缩放:4,
中心:{
纬度:-25.363882,
液化天然气:131.044922
},
mapTypeId:'地形'
});
map.addListener('click',函数(e){
添加标记(如latLng);
});
}
功能添加标记(位置){
电梯。getElevationForLocations({
“位置”:[位置]
},功能(结果、状态){
如果(状态=='OK'){
//检索第一个结果
如果(结果[0]){
var marker=new google.maps.marker({
位置:位置,,
地图:地图
});
panTo地图(位置);
推({
马克:马克,
高程:结果[0]。高程
});
控制台日志(标记);
}
}
});
}
google.maps.event.addDomListener(窗口'load',initMap)代码>
#地图{
高度:200px;
}
您正在使用异步函数。这就是为什么getElevationForLocations
具有回调函数的原因。所以你应该用另一种方法:调用服务,在回调函数中,创建你的标记并将其推送到带有高程的数组中。非常感谢^^^它非常简单,我已经知道了这个方法,但我就是记不起来了^ ^