2012-04-10 17 views
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; 
} 

回答

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

謝謝疃,但是那基本上就是我已經在做(在回調調用和參數中顯式引用'coords') – user1325164 2012-04-10 22:02:58

+0

getLocation函數是正確的,但調用不正確getLocation只是在執行'callback(coords)'時拋棄返回。 – 2012-04-10 22:18:54

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說,他們只是想在latlng1coords值。以下是你如何完成的:

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

請注意,這不會改變API的異步性質。在異步調用完成之前,變量latlng1將不具有coords值。由於這個版本不使用回調你沒有辦法知道完成時的(不是檢查latlng1undefined

+0

理想情況下,我想將coords值分配給變量latlng1,而不是僅僅將它用於回調 – user1325164 2012-04-10 21:58:59

+0

而不是'var coords ='只要執行'latlng1 =' – 2012-04-10 22:00:01

+0

@ user1325164如果是這種情況,那麼你可以分配到'latlng1'而不是做回調。 – JaredPar 2012-04-10 22:01:50

0

其他怎麼樣:

var latlng1; 

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

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