J'ai fait un LocationService
dans AngularJSpromesse de se résoudre avant même .resolve() est appelée
factory('LocationService', function ($q) {
var deferred = $q.defer();
var curPos = {};
var resolved = false;
return {
getPosition : function (refresh) {
if (!resolved || refresh) {
navigator.geolocation.getCurrentPosition(function (pos) {
curPos.curLat = pos.coords.latitude;
curPos.curLng = pos.coords.longitude;
resolved = true;
console.log("Resolve", curPos);
deferred.resolve(curPos);
}, function (error) {
deferred.reject('Unable to get location: ' + error.message);
}, {
enableHighAccuracy : true
});
} else {
deferred.resolve(curPos);
}
return deferred.promise;
}
}
})
et en utilisant comme ça
LocationService.getPosition(refresh).then(function (curPos) {
console.log('then');
var latLng = new google.maps.LatLng(curPos.curLat, curPos.curLng);
$scope.map.setCenter(latLng);
$scope.map.setZoom(15);
});
première fois il fonctionne très bien, mais quand je clique un bouton qui appelle getPosition()
, il résout même avant les déclencheurs LocationService
deferred.resolve()
. et je reçois le mauvais résultat dans le rappel. Mais finalement après 2/3 secondes getCurrentPosition
déclenche un rappel et la nouvelle valeur est définie dans curPos
. Ce que je reçois pour la prochaine fois. La console imprime then
en premier et Resolve
après 2/3 secondes. Je ne suis pas capable de comprendre ce qui ne va pas ici. Quelqu'un pourrait-il guider un peu?
Essayez-vous de mettre en cache des données? alors vous devez utiliser [$ cacheFactory] (https://docs.angularjs.org/api/ng/service/$cacheFactory) – Satpal
Oui, je souhaite actualiser l'emplacement de l'utilisateur uniquement si je transmets l'actualisation explicitement. –
Ok, je vais y jeter un coup d'œil. Mais ce n'est pas le problème ici, n'est-ce pas? –