只是一个简单的问题。
我有 factory
:
angular.module('app.services').factory('DatabaseFactory',
function($log, $q, DB_CONFIG, CATEGORY_CONFIG, $http, $webSql) {
var self = this;
self.db = null;
self.init = function() {
self.db = $webSql.openDatabase (DB_CONFIG.name, '1.0', 'database', 2 * 1024 * 1024);
self.db.createTable('QuestionIndex', {
'id':{
'type': 'INTEGER',
'null': 'NOT NULL', // default is 'NULL' (if not defined)
'primary': true, // primary
'auto_increment': true // auto increment
},
'question_id': {
'type': 'INTEGER'
},
'oltre': {
'type': 'INTEGER'
},
'section_id': {
'type': 'INTEGER'
},
'errors_count': {
'type': 'INTEGER'
},
'done_count': {
'type': 'INTEGER'
}
});
};
self.getAll = function() {
self.db.select('QuestionIndex',{"oltre":'IS NOT NULL'}).then(function(results) {
var records = [];
for(var i=0; i < results.rows.length; i++){
records.push(results.rows.item(i));
};
$log.info(records);
return records;
});
};
return self;
});
我正在另一家工厂注入这个工厂,我必须检索调用getAll
函数的数据。
angular.module('app.services')
.factory('QuizCreate', ['DatabaseFactory','$log', function(DatabaseFactory,$log){
self.generateQuiz = function() {
$log.info(DatabaseFactory.getAll());
};
return self;
}]);
第一个日志条目返回所有对象,查询工作正常。我无法理解为什么我的第二个日志会返回undefined
。
为什么我无法从第一个工厂返回我的数据?
答案 0 :(得分:0)
它(数据库查询)异步运行,因此return
内的.then()
语句在$log.info
执行之前未被命中。
我会按如下方式对其进行修改:
DatabaseFactory:
self.getAll = function() {
return self.db.select('QuestionIndex',{"oltre":'IS NOT NULL'}).then(function(results) {
var records = [];
for(var i=0; i < results.rows.length; i++){
records.push(results.rows.item(i));
};
$log.info(records);
return records;
});
};
QuizCreate Factory
self.generateQuiz = function() {
DatabaseFactory.getAll().then(function(result){
$log.info(result);
});
};
答案 1 :(得分:0)
您致电DatabaseFactory.init()
了吗?我没有看到它被随处召唤