在我追求学习Javascript和Ionic的过程中,我再次转向StackOverFlow。
我创建了以下工厂函数:
.factory('GeoService', function($ionicPlatform, $cordovaGeolocation) {
var positionOptions = {timeout: 10000, enableHighAccuracy: true};
return {
getPosition: function() {
return $ionicPlatform.ready()
.then(function() {
return $cordovaGeolocation.getCurrentPosition(positionOptions);
})
}
};
});
获得GPS坐标。要调用此函数,我将执行以下操作:
GeoService.getPosition()
.then(function(position) {
//Obtain geolocation information
console.dir(position.coords)
return position.coords;
}, function(err) {
console.log('getCurrentPosition error: ' + err);
}).then(function(data) {
console.dir(data)
//make http request with the information
})
我遇到的问题是第二个.then在尝试通过http发送信息之前没有等待GeoService.getPosition()解析。我怀疑我需要使用q.all的内容,但我不确定。
非常感谢
答案 0 :(得分:1)
你在.then()
中使用GeoService.getPosition()
,但你没有回复承诺!!试试这个:
.factory('GeoService', function($ionicPlatform, $cordovaGeolocation) {
var positionOptions = {timeout: 10000, enableHighAccuracy: true};
return {
getPosition: function() {
return new Promise(function(resolve) {
$ionicPlatform.ready()
.then(function() {
$cordovaGeolocation.getCurrentPosition(positionOptions)
.then(function(position) {
resolve(position);
});
})
}
};
});
答案 1 :(得分:1)
您应该定义自己的承诺
.factory('GeoService', function($q,$ionicPlatform, $cordovaGeolocation) {
function getPosition(){
return $q(function(resolve, reject) {
var positionOptions = {timeout: 10000, enableHighAccuracy: true};
$cordovaGeolocation.getCurrentPosition(positionOptions)
.then(function(position){
resolve(position);
}, function(error){
reject(error);
});
})
}
return {
getPosition: getPosition
};
});