.然后在使用 cordovaGeolocation 时不等待 return 函数
.then not waiting for return function when using cordovaGeolocation
为了学习 Javascript 和 Ionic,我再次求助于 Whosebug。
我创建了以下工厂函数:
.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 的东西,但我不确定。
非常感谢
您正在 GeoService.getPosition()
中使用 .then()
但您没有返回 Promise!!试试这个:
.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);
});
})
}
};
});
您应该定义自己的承诺
.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
};
});
为了学习 Javascript 和 Ionic,我再次求助于 Whosebug。
我创建了以下工厂函数:
.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 的东西,但我不确定。
非常感谢
您正在 GeoService.getPosition()
中使用 .then()
但您没有返回 Promise!!试试这个:
.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);
});
})
}
};
});
您应该定义自己的承诺
.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
};
});