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

一方、それを return に割り当てる場合は、getLocationそれは不可能です。API は非同期であるため、メソッドgetCurrentPositionから同期的に返すことはできませんgetLocation。代わりに、使用したいコールバックを渡す必要がありますcoords

編集

coordsOPは、 の値が欲しいだけだと言いました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 に答える