javascript – 如何在Angular中获取一个变量之外的变量?
作者:互联网
参见英文答案 > How can I access a variable outside a promise `.then` method? 2个
所以我在这里有一个代码:
.factory("Geolocation", ["$cordovaGeolocation",
function ($cordovaGeolocation) {
var posOptions = {
timeout: 10000,
enableHighAccuracy: false
};
var getCurrentPosition = $cordovaGeolocation.getCurrentPosition(posOptions);
return {
lat: function () {
getCurrentPosition.then(function(position) {
return position.coords.latitude; //getting undefined
})
},
long: function() {
getCurrentPosition.then(function(position) {
return position.coords.longitude;
})
}
}
}
])
在我的控制器中,我称之为Geolocation.lat()或Geolocation.long().
现在我的问题是我得到了undefined而不是lat和long.
如果我这样做:
return getCurrentPosition.then(function(position) {
return position.coords.longitude;
})
我得到了另一个多余的承诺,我唯一想要发生的就是获得lat和long.
有没有一种简单的方法来访问该承诺中的变量?
任何帮助将非常感激.
更新(尝试在外部声明一个变量并在promise中填充但我仍然得到一个空值.
.factory("Geolocation", ["$cordovaGeolocation", "$rootScope",
function ($cordovaGeolocation, $rootScope) {
var posOptions = {
timeout: 10000,
enableHighAccuracy: false
};
var getCurrentPosition = $cordovaGeolocation.getCurrentPosition(posOptions);
$rootScope.latitude = null;
$rootScope.longitude = null;
return {
lat: function () {
getCurrentPosition.then(function(position) {
$rootScope.latitude = position.coords.latitude;
})
return $rootScope.latitude;
},
long: function() {
getCurrentPosition.then(function(position) {
return $rootScope.longitude;
})
}
}
}
])
解决方法:
由于您正在执行异步操作,因此您采用的方法永远不会起作用.
相反,你应该做的是:
>在promise之外声明一个范围变量.
>解决工厂退回的承诺
>将声明的值分配给response.data.
所以不要从工厂返回.
而只是将承诺发送给控制器.
然后在控制器中执行上述步骤并获取数据.
var promise = yourFactory.get() //get the promise
promise.then(function(response){
$scope.lat = response.data
})
标签:angular-promise,javascript,angularjs 来源: https://codeday.me/bug/20190828/1754516.html