2012-06-07 98 views
0

我使用此代碼來計算兩個gps位置之間的距離。問題是當我返回計算值時它返回未定義的值。請幫我在jquery函數中返回未定義的值

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

您可以設置dist'的'值傳遞給調用'navigator.geolocation.getCurrentPosition功能( )'並在該呼叫之後立即返回'dist'。如果'getCurrentPosition()'是異步的,那麼返回它時不會設置'dist'。 –

回答

2

dist還沒有設置,當你返回。設置dist的功能是回調。從外部(回調)函數返回後,這很可能會被調用。

執行的可能順序是

  1. adapter.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); 

     }); 

    }); 
}