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
});