2012-04-10 26 views
1

Ich versuche, einen Wert aus einer Callback-Funktion zurückzukehren und es zu einem Variablen zuweisen, obwohl es habe Schwierigkeiten heraus zu arbeiten - jede Hilfe wirklich geschätzt würde ....einen Wert aus einer Callback-Funktion bekommt

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

Antwort

-1

Sie können Coords an den Callback-Call übergeben und einen Parameter dafür im Callback definieren. Es ist einfacher zu lesen als zu versuchen, zu erklären:

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

Dank Tuan, aber das ist im Wesentlichen, was ich bereits mache (Balken referenziert explizit auf "coords" im Callback Call und Argument) – user1325164

+0

Die 'getLocation' Funktion ist korrekt, aber der Aufruf ist nicht. getLocation verwirft nur die Rückgabe, wenn 'Callback (coords)'. –

4

Ich bin verwirrt als ob Sie die Callback-Zugriff haben wollen auf den coords Wert oder einfach zurück von der getLocation Funktion. Wenn es nur möglich ist, coords für den Rückruf verfügbar zu haben, übergeben Sie es als Parameter.

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

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

Auf der anderen Seite, wenn sie es auf die Rückkehr von getLocation zugewiesen haben sind, dann ist das nicht möglich. Die getCurrentPosition API ist asynchron und daher können Sie sie nicht synchron von der getLocation-Methode zurückgeben. Stattdessen müssen Sie den Rückruf zurückgeben, der coords verwenden möchte.

EDIT

OP sagten, sie wollen einfach nur die coords Wert in latlng1. Hier ist, wie Sie das erreichen

Beachten Sie, dass dies jedoch nicht die asynchrone Natur der API ändert. Die Variable latlng1 hat den Wert coords nicht, bis der Async-Aufruf abgeschlossen ist. Da diese Version nicht einen Rückruf verwenden haben keine Möglichkeit zu wissen, wann das abgeschlossen ist (außer Kontrolle latlng1 für undefined

+0

Idealerweise möchte ich Weisen Sie den Wert coords der Variablen latlng1 zu, anstatt ihn nur dem Callback – user1325164

+0

zur Verfügung zu stellen, anstatt 'var coords =' tun Sie einfach 'latlng1 = ' –

+0

@ user1325164 Wenn das der Fall ist, dann können Sie in' latlng1' zuweisen, anstatt einen Rückruf durchzuführen. – JaredPar

0

Wie wäre:

var latlng1; 

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

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