网上大多数简单的html5地理位置示例都是这样的:
if(navigator.geolocation) {
navigator.geolocation.getCurrentPosition(success, error);
} else {
//no geolocation
}
function success(position) {
//do things with the position object in here
}
function error (msg) {
//log error codes etc here
}
我不希望在成功回调中拥有所有逻辑(有很多)。将传递给success
的对象暴露给父作用域的最佳方法是什么?以某种方式使用success
内的闭包?我不太明白。感谢
答案 0 :(得分:3)
需要回调函数的原因是因为对getCurrentPosition的调用是异步的。因此,虽然您可以将位置公开为“父”(调用getCurrentPosition的范围)范围内的变量,但这对于调用getCurrentPosition的执行线程没有用,因为这与成功的不同功能。例如,这不起作用:
function parent(){
var position;
function success(p) {
position = p;
}
function error (msg) {
//log error codes etc here
}
navigator.geolocation.getCurrentPosition(success, error);
var longitude = position.coords.longitude; // position is undefined here
}
但是,如果要将代码细分为较小的块,可以将位置存储在父级范围内的变量中(避免需要通过),然后将多个函数链接在一起:
function parent(){
var position;
function success(p) {
position = p;
doSomethingWithPosition();
}
function error (msg) {
//log error codes etc here
}
navigator.geolocation.getCurrentPosition(success, error);
function doSomethingWithPosition(){
var longitude = position.coords.longitude; // position is defined here
doSomethingElseWithPosition();
}
function doSomethingElseWithPosition(){
var latitude = position.coords.latitude; // position is defined here
}
}