从回调函数中获取值

时间:2012-04-10 21:52:12

标签: javascript function callback anonymous

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

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;
}

3 个答案:

答案 0 :(得分: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的返回,那么这是不可能的。 getCurrentPosition API是异步的,因此您无法从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的{​​{1}}

之外

答案 1 :(得分:0)

怎么样:

var latlng1;

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

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

答案 2 :(得分:-1)

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

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;
})