Die getLocation()
Funktion, die Standort in 3 Versuchen abrufen sollte, gibt stattdessen zurück. navigator.geolocation.getCurrentPosition()
gibt die korrekte Position zurück, aber das Problem liegt in der Verarbeitung von Versprechen.JS Versprechen innerhalb des Versprechens
Das Problem ist anscheinend, dass ich ein Versprechen innerhalb des Versprechens nenne. Ich darf das Schlüsselwort await
nicht innerhalb von geolocate()
verwenden, das bereits als async
deklariert ist.
Original-Aufruf:
var getLocationPromise = this.getLocation();
// Do something...
location = await getLocationPromise;
getLocation()
:
async getLocation() {
return new Promise((resolve, reject) => {
var geolocate;
for (let i=0; i<3; i++) {
geolocate = this.geolocate();
try {
var location = geolocate;//CAN'T USE AWAIT INSIDE ASYNC...
resolve(location);
} catch(err) {
continue;
}
}
reject("Max geolocation attempts");
});
}
geolocate()
:
async geolocate() {
return new Promise((resolve, reject) => {
navigator.geolocation.getCurrentPosition(
(position) => {
resolve(position);
},
(err) => {
reject(err);
},
{enableHighAccuracy: true, timeout: 20000, maximumAge: 1000}
);
});
}
'erwarten getLocation (bis kombiniert und vereinfacht werden). dann(); '===' erwarten getLocation(); '- nicht wahr? –
Es gibt andere Ergebnisse. Ich hatte Probleme mit 'erwarten getLocation();' 'undefined' zurückgeben, so verwende ich' erwarten getLocation(). Then(); 'das scheint sicherer –
nicht sicher, warum Sie' async' auf 'geolocate' und' getLocation' verwenden - da keine dieser Funktionen "erwarten" –