gpt4 book ai didi

javascript - 在 Angular 中异步加载工厂中的坐标

转载 作者:行者123 更新时间:2023-11-28 07:06:17 24 4
gpt4 key购买 nike

我对工厂的调用在 map Controller 中返回得太快。我正在尝试设置 map 的中心,但是由于对 geo 的调用返回未定义,因此它永远不会设置中心。然而,坐标是在地理工厂中获取的。他们只是太迟了。

我认为 .then() 的目的是等待返回日期。那么,如何强制我的应用程序等待?

我的工厂是:

angular.module('comhubApp')
.factory('geo', function ($q) {

var getPosition = function () {
var deferred = $q.defer();
if (navigator.geolocation) {
deferred.resolve(navigator.geolocation.getCurrentPosition(function (position) {
var crd = position.coords;
console.log('Latitude : ' + crd.latitude);
console.log('Longitude: ' + crd.longitude);
return crd;
} ));
}
return deferred.promise;
}

// Public API here
return {
getPosition: getPosition
};});

我的 map Controller 调用它:

// GEOLOCATION
geo.getPosition().then( function (position) {
console.log(position);
$scope.center.lat = position.latitude;
$scope.center.lon = position.longitude;
});

最佳答案

您在 geolocation.getCurrentPosition 返回之前调用 deferred.resolve。您需要在以下时间后调用它:

var getPosition = function() {
var deferred = $q.defer();
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(function(position) {
var crd = position.coords;
console.log('Latitude : ' + crd.latitude);
console.log('Longitude: ' + crd.longitude);
deferred.resolve(crd);
});
}
return deferred.promise;
}

这是一个有效的 plunkr:http://plnkr.co/edit/H7LEjsrSkZOzGBZIeTXF?p=preview

关于javascript - 在 Angular 中异步加载工厂中的坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31683177/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com