就是这样,jsfiddle
如您所见,我打算为谷歌地图功能制作单独的功能。 locate_self()
函数用于返回当前地理位置的latlng坐标,而initialize_map()
函数绘制地图并接受可选的预定义协调,否则使用默认随机坐标。
问题是,initialize_map()
的触发速度比locate_self()
快,将返回的元素渲染为undefined
,最后,initialize_map()
使用默认坐标。
在locate_self()
内,我通过提供alert()
创建了一个测试块,以及当前的地理位置坐标,以指示此功能正常运行。
问题是我如何为locate_self()做initialize_map()
等待,直到返回坐标而不是undefined
?
稍后我将使用相同的解决方案来接受latlng和返回地址字符串的函数。地理编码器也有同样的“延迟”。
我之前尝试过使用超时但它仍然给我未定义(也许我错误地放置了超时块,我不知道)。
谢谢,如果这是转发,我很抱歉
答案 0 :(得分:2)
为什么不反过来呢?
http://jsfiddle.net/upsidown/rMxNL/2/
var gm_map_container = document.getElementById('container');
var gm_map_options = { zoom: 8 };
function initialize_map(location) {
gm_map = new google.maps.Map(gm_map_container,gm_map_options);
if (!location) { location = new google.maps.LatLng(-34.397, 150.644); }
gm_map.setCenter(location);
locate_self();
}
function locate_self() {
if(navigator.geolocation) {
navigator.geolocation.getCurrentPosition(function(position) {
var pos = new google.maps.LatLng(position.coords.latitude, position.coords.longitude);
gm_map.setCenter(pos);
});
} else { return false; }
}
initialize_map();
答案 1 :(得分:2)
地理定位服务是异步的。最简单的方法是使用回调而不是return
:
function initialize_map(result) {
if (result !== 'error') {
gm_map = new google.maps.Map(gm_map_container, gm_map_options);
if (!result) {
result = new google.maps.LatLng(-34.397, 150.644);
}
gm_map.setCenter(result);
}
}
function locate_self(callback) {
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(function (position) {
var pos = new google.maps.LatLng(position.coords.latitude, position.coords.longitude);
callback(pos);
});
} else { callback('error'); }
}
locate_self(initialize_map);