2016-12-14 2 views
-1

Ich habe eine Funktion:Warum Versprechen Logdaten aber mit gleichen Daten undefined zurück

getCoordinates: function() { 
     geoLocation.getCurrentLocation().then(function(location) { 
      return "latitude: " + location.latitude + " longitude:" + location.longitude; 
     }); 
    } 

Welche undefined zurück, aber wenn ich stattdessen tun:

getCoordinates: function() { 
     geoLocation.getCurrentLocation().then(function(location) { 
      console.log("latitude: " + location.latitude + " longitude:" + location.longitude); 
     }); 
    } 

und führen die gleiche Funktion, die ich bekommen :

"Breite: 4X.XXXXXX Länge: -12X.XXXXXXX"

ich verstehe nicht, warum es zurückkehrt undefiniert, wenn die Daten definiert werden müssen oder nicht an der Konsole protokolliert werden. Ist das eine Art Timing-Problem? Was vermisse ich?

+0

Haben Sie erwartet, sie die Daten oder ein Versprechen für die Daten zurück? – Bergi

Antwort

4

Sie sind nur return vom then Rückruf ing, nicht von der getCoordinates Funktion (die in der Tat nicht return alles, damit undefined).

This is unsolvable for asynchronous callbacks im Allgemeinen. In Ihrem Fall besteht die beste Lösung darin, einfach das Versprechen abzugeben, das Sie bereits erstellt haben und das mit dem erwarteten Wert in der Zukunft erfüllt wird.

getCoordinates: function() { 
    return geoLocation.getCurrentLocation().then(function(location) { 
// ^^^^^^ 
     return "latitude: " + location.latitude + " longitude:" + location.longitude; 
    }); 
} 
+0

Ich habe die obige Lösung ausprobiert. Wenn ich das mache, wird das Versprechen-Objekt selbst zurückgegeben: [Objekt-Versprechen] – HelloWorld

+0

Ja, das wird erwartet. Sie können die Daten nicht zurückgeben, da sie noch nicht existieren. Bitte lesen Sie die verlinkte Frage. – Bergi

+1

Anstatt 'console.log (getCoordinates())' auszuführen, müssen Sie 'getCoordinates(). Then (console.log)' ausführen und sich damit befassen, dass Sie das Protokoll nicht sofort erhalten. – Bergi

Verwandte Themen