所以,我创建了一个工厂来查询数据库并返回数据。在方法内部,我可以打印到控制台。但是当我从控制器内部检查返回数据时,它是空的,请查看下面的代码,看看你是否可以提供帮助。
这是工厂
rs.factory("userService",function($http,$ionicLoading,$cordovaProgress,$cordovaSQLite,$q){
var user = {};
/**get user data */
user.getData = function(){
//stores from the local database
var userData = [];
var query = "SELECT * FROM users";
$cordovaSQLite.execute(db, query, []).then(function(res) {
for (var i=0; i < res.rows.length; i++){
userData.push(res.rows.item(i));
}
console.log("User Data : " + JSON.stringify(userData));//this works
}, function (err) {
console.error(err);
})
return userData;
};
return user;
});
控制器:
angular.module('starter.controllers', [])
.controller('AppCtrl', function($scope, $ionicModal, $timeout, $http, $state, $cordovaSQLite,$ionicNavBarDelegate,userService) {
console.log(userService.getData()); // is empty
})
此处没有任何内容。
答案 0 :(得分:0)
你需要从成功回复你的承诺中获得userData
的第一件事,&amp;之后返回$cordovaSQLLite.execute
承诺,以便您可以在控制器
user.getData = function() {
//stores from the local database
var userData = [];
var query = "SELECT * FROM users";
//returning promise
return $cordovaSQLite.execute(db, query, []).then(function(res) {
for (var i = 0; i < res.rows.length; i++) {
userData.push(res.rows.item(i));
}
//return data once user Data created
return userData;
}, function(err) {
console.error(err);
})
};
然后在控制器内部,你可以通过在该方法上使用.then函数来访问数据
angular.module('starter.controllers', [])
.controller('AppCtrl', function($scope, $ionicModal, $timeout, $http, $state, $cordovaSQLite,$ionicNavBarDelegate,userService) {
userService.getData().then(function(userData){
console.log(userData);
});
})