2016-06-04 9 views
0

Ich sah Beispiele auf Cordova Geolocation und ich habe Probleme herauszufinden, wie man die Position von seiner Funktion zurück, so dass ich es mehrmals von verschiedenen Standorten aus anrufen kann. Hiereine Cordova Geolocation-Funktion zur Rückkehr Position

ist ein Beispiel für die Position bekommen:

var onSuccess = function (position) { 
     alert('Latitude: ' + position.coords.latitude + '\n' + 
      'Longitude: ' + position.coords.longitude + '\n' + 
      'Altitude: ' + position.coords.altitude + '\n' + 
      'Accuracy: ' + position.coords.accuracy + '\n' + 
      'Altitude Accuracy: ' + position.coords.altitudeAccuracy + '\n' + 
      'Heading: ' + position.coords.heading + '\n' + 
      'Speed: ' + position.coords.speed + '\n' + 
      'Timestamp: ' + position.timestamp + '\n'); 
    }; 

    function onError (error) { 
     alert('code: ' + error.code + '\n' + 
      'message: ' + error.message + '\n'); 
    } 

    navigator.geolocation.getCurrentPosition(onSuccess, onError); 

Deshalb möchte ich in der Lage sein, eine Funktion aufzurufen und haben sie die Position Objekt zurück, was seine immer von ‚onSuccess‘

+0

Wenn Sie für jedes Mal überprüfen Sie Ihre Geräteposition Änderungen können Sie 'navigator.geolocation.watchPosition()' – Mikhail

Antwort

1

Mai sein bind ist, was Sie suchen:

var getPosition 
function onSuccess(position){ 
    getPosition = function(position){ 
    // do somethin with the position object afterwards 
    }.bind(null, position); 
} 

// ... some code or some timeout after onSuccess function has been fired 

if(getPosition)getPosition(); 

Nur um klarzustellen, wie oben auf den Code arbeiten sollte:

// simulate cordova-geolocation-onSuccess call 
onSuccess({x:2,y:5}); 

setTimeout(function(){ 

    if(getPosition)getPosition(); 

},2000); 

Hoffe das hilft und ich habe Ihre Frage richtig verstanden.

Hinweis: bind kann verwendet werden, um eine Funktion zu erstellen, die in einem bestimmten Kontext (erster Parameter) und mit bestimmten übergebenen Parameterwerten (zweiter, dritter ... Parameter) ausgeführt werden kann.

nach Ihren Kommentar unten: Sie können auch eine Callback-Funktion verwenden als Parameter dieses zu erreichen:

function getUserPosition(callback) { 
    function onSuccess(position) { 
    callback(position); 
    }; 
    $cordovaGeolocation.getCurrentPosition(options).then(onSuccess); 
}; 

getUserPosition(function(position){ 
    // do something with position object here 
}); 

Aber wenn Sie möchten, eine Funktion verwenden, die wirklich einen Geolocation-Objekt zurückgeben können Sie müssen Verwende die erste Antwort.

+0

Was mache ich hier falsch? Funktion getUserPosition() { var userPosition; Funktion onSuccess (Position) { userPosition = Funktion (Position) { } .bind (null, position); }; $ cordovaGeolocation.getCurrentPosition (Optionen) .then (onSuccess); Rückgabe userPosition; }; –

Verwandte Themen