Angularjs/Ionic 有承诺的数据库结果
Angularjs/Ionic DB result with promise
我遇到了一个简单的查询:
.factory('Config', function($http, DB) {
var self = this;
self.setValue = function(key,value) {
console.log('setValue(value)', value);
return DB.query("UPDATE config SET value = '"+value+"' WHERE key = '"+key+"'")
.then(function(result){
return DB.fetchAll(result);
});
}
self.getValue = function(key) {
return DB.query("SELECT value FROM config WHERE key = '"+key+"'")
.then(function(result){
return DB.fetchOne(result);
});
};
return self;
})
在 controller.js 标题下使用以下代码:
.factory('DB', function($q, DB_CONFIG) {
var self = this;
self.db = null;
(为了简单起见,我去掉了函数的初始化部分。另外,DB 在插入、获取和更新数据时运行良好。)
self.fetchOne = function(result) {
var output = null;
output = angular.copy(result.rows.item(0));
return output;
};
self.query = function (sql, bindings) {
bindings = typeof bindings !== 'undefined' ? bindings : [];
var deferred = $q.defer();
self.db.transaction(function (transaction) {
transaction.executeSql(sql, bindings, function (transaction, result) {
deferred.resolve(result);
}, function (transaction, error) {
deferred.reject(error);
});
});
return deferred.promise;
};
self.fetchAll = function (result) {
var output = [];
for (var i = 0; i < result.rows.length; i++) {
output.push(result.rows.item(i));
}
return output;
};
这样调用:
$scope.config.recordar = Config.getValue("recordar");
正在做 console.log returns:
我正在努力访问 值:"true",它在上图中以蓝色突出显示。
有线索吗?
我假设你应该改变你的函数声明:
self.setValue = function(key,value) {
console.log('setValue(value)', value);
return DB.query("UPDATE config SET value = '"+value+"' WHERE key = '"+key+"'")
.then(function(result){
return DB.fetchAll(result);
});
}
到
self.setValue = function(key,value) {
console.log('setValue(value)', value);
DB.query("UPDATE config SET value = '"+value+"' WHERE key = '"+key+"'")
.then(function(result){
return DB.fetchAll(result);
});
}
你会return你承诺的结果,而不是你的承诺
我已将 "return DB..." 更改为 "DB..."
$scope.config.recordar = Config.getValue("recordar");
不起作用(ala JS)。它必须这样调用:
Config.getValue("recordar").then(function(data) {
$scope.config.recordar
});
我遇到了一个简单的查询:
.factory('Config', function($http, DB) {
var self = this;
self.setValue = function(key,value) {
console.log('setValue(value)', value);
return DB.query("UPDATE config SET value = '"+value+"' WHERE key = '"+key+"'")
.then(function(result){
return DB.fetchAll(result);
});
}
self.getValue = function(key) {
return DB.query("SELECT value FROM config WHERE key = '"+key+"'")
.then(function(result){
return DB.fetchOne(result);
});
};
return self;
})
在 controller.js 标题下使用以下代码:
.factory('DB', function($q, DB_CONFIG) {
var self = this;
self.db = null;
(为了简单起见,我去掉了函数的初始化部分。另外,DB 在插入、获取和更新数据时运行良好。)
self.fetchOne = function(result) {
var output = null;
output = angular.copy(result.rows.item(0));
return output;
};
self.query = function (sql, bindings) {
bindings = typeof bindings !== 'undefined' ? bindings : [];
var deferred = $q.defer();
self.db.transaction(function (transaction) {
transaction.executeSql(sql, bindings, function (transaction, result) {
deferred.resolve(result);
}, function (transaction, error) {
deferred.reject(error);
});
});
return deferred.promise;
};
self.fetchAll = function (result) {
var output = [];
for (var i = 0; i < result.rows.length; i++) {
output.push(result.rows.item(i));
}
return output;
};
这样调用:
$scope.config.recordar = Config.getValue("recordar");
正在做 console.log returns:
我正在努力访问 值:"true",它在上图中以蓝色突出显示。
有线索吗?
我假设你应该改变你的函数声明:
self.setValue = function(key,value) {
console.log('setValue(value)', value);
return DB.query("UPDATE config SET value = '"+value+"' WHERE key = '"+key+"'")
.then(function(result){
return DB.fetchAll(result);
});
}
到
self.setValue = function(key,value) {
console.log('setValue(value)', value);
DB.query("UPDATE config SET value = '"+value+"' WHERE key = '"+key+"'")
.then(function(result){
return DB.fetchAll(result);
});
}
你会return你承诺的结果,而不是你的承诺 我已将 "return DB..." 更改为 "DB..."
$scope.config.recordar = Config.getValue("recordar");
不起作用(ala JS)。它必须这样调用:
Config.getValue("recordar").then(function(data) {
$scope.config.recordar
});