1

我正在尝试从回调函数返回一个值并将其分配给一个变量,尽管我正在努力解决它 - 任何帮助将不胜感激......

var latlng1;

function getLocation(){
  navigator.geolocation.getCurrentPosition (function (position){
    coords = position.coords.latitude + "," + position.coords.longitude;
    callback();         
  })
}

//how can I assign the coords value from the callback to variable latlng1 with global scope?
getLocation (function(){
  //alert(coords);
  return coords;
})

// -----------
//I'm trying something like this....but no joy
latlng1 = getLocation (function(){
  return coords;
}
4

3 回答 3

4

我很困惑您是否希望回调能够访问该coords值或只是从getLocation函数中返回它。如果它只是对coords回调可用,则将其作为参数传递。

function getLocation(callback) {
  navigator.geolocation.getCurrentPosition (function (position){
    var coords = position.coords.latitude + "," + position.coords.longitude;
    callback(coords);         
  })
}

getLocation (function(coords){
  alert(coords);
})

另一方面,如果要将其分配给返回,getLocation则这是不可能的。API 是异步的getCurrentPosition,因此您不能从getLocation方法中同步返回它。相反,您需要传递想要使用的回调coords

编辑

OP 说他们只想要coords. latlng1这是你如何做到这一点的

var latlng1;
function getLocation() {
  navigator.geolocation.getCurrentPosition (function (position){
    var coords = position.coords.latitude + "," + position.coords.longitude;
    latlng1 = coords; 
  })
}

请注意,这不会改变 API 的异步特性。在异步调用完成之前,该变量latlng1不会具有该值。coords因为这个版本不使用回调你无法知道什么时候完成(除了latlng1检查undefined

于 2012-04-10T21:55:52.293 回答
0

怎么样:

var latlng1;

function getLocation(){
  navigator.geolocation.getCurrentPosition (function (position){
    latlng1 = position.coords.latitude + "," + position.coords.longitude;
    callback();         
  })
}

getLocation (function(){
  alert(latlng1);
})
于 2012-04-10T22:03:12.693 回答
-1

您可以将坐标传递给回调调用,并在回调中为其定义一个参数。它比试图解释更容易阅读:

var latlng1;

function getLocation(callback){
  navigator.geolocation.getCurrentPosition (function (position){
    coords = position.coords.latitude + "," + position.coords.longitude;
    callback(coords);         
  })
}

//how can I assign the coords value from the callback to variable latlng1 with global scope?
getLocation (function(coords){
  //alert(coords);
  return coords;
})
于 2012-04-10T21:55:37.150 回答