0

我使用此代码来计算两个 gps 位置之间的距离。问题是当我返回计算值时,它返回未定义的值。请帮我

function calcDistane(offerID,userLocation){
    var dist;
    var adapter = new LocationAdapter();

    adapter.selectByOfferId(offerID,function(res){                       

    navigator.geolocation.getCurrentPosition(function(position){

        var R = 6371;
        var userLocation= position.coords;

        dist= Math.acos(Math.sin(userLocation.latitude)*Math.sin(res.item(0).lt) + 
              Math.cos(userLocation.latitude)*Math.cos(res.item(0).lt) *
              Math.cos(userLocation.longitude-res.item(0).lg)) * R;
        });

    });  
    return dist;
};
4

1 回答 1

2

dist你回来的时候还没有设置。设置 dist 的函数是一个回调。从外部(回调)函数返回后很可能会调用它。

可能的执行顺序是

  1. 适配器.selectByOfferId
  2. 返回 dist (未定义)
  3. 调用用作adapter.selectByOfferId回调的匿名函数
  4. 调用 navigator.geolocation.getCurrentPosition 并从步骤 3 的回调中返回
  5. 当 navigator.geolocation.getCurrentPosition 返回时,调用该调用的回调并设置 dist。在第 2 步之后

您将需要传递延续而不是返回

function calcDistane(offerID,userLocation,callback){
  var adapter = new LocationAdapter();

  adapter.selectByOfferId(offerID,function(res){                       

        navigator.geolocation.getCurrentPosition(function(position){

               var R = 6371;
               var userLocation= position.coords;

               callback(Math.acos(Math.sin(userLocation.latitude)*Math.sin(res.item(0).lt) + 
                        Math.cos(userLocation.latitude)*Math.cos(res.item(0).lt) *
                        Math.cos(userLocation.longitude-res.item(0).lg)) * R);

       });

  });
}
于 2012-06-07T13:14:40.933 回答