SQLite查询结果未从函数返回

时间:2016-09-07 10:11:56

标签: angularjs sqlite cordova ionic-framework promise

我要做的是创建一种存储服务,在其中我使用SQLite数据库存储键和值对,之后我可以根据键检索它们。为此,我设置了以下代码:

.service('StorageService', function($cordovaSQLite, $q) {

  if(window.cordova) {
    db = $cordovaSQLite.openDB("vouchers.db");
  } else {
    db = window.openDatabase("vouchers.db", "1.0", "Vouchers db", -1);
  }
  $cordovaSQLite.execute(db, "CREATE TABLE IF NOT EXISTS vouchers (key text, value text)");

  return {
    getItem: function(item) {
      var query = "SELECT key, value FROM vouchers WHERE key = ?";
        $cordovaSQLite.execute(db,query,[item]).then(function(result) {
        console.log(result.rows[0].value);
        return result.rows[0].value;
        });
    },
    setItem: function(item, data) {
      var query = "INSERT INTO vouchers (key, value) VALUES (?,?)";
      return $cordovaSQLite.execute(db, query, [item, data]);
    }
  };
})

现在,大部分内容都很有效。我可以在db中存储项目,甚至可以从函数内部检索和记录它们,如下所示:

console.log(result.rows[0].value);

当我记录这个时,我得到了预期的值,但当我返回它并将其记录在我正在使用此服务的控制器中时,它仍未定义。我的控制器中的代码如下所示:

var test = StorageService.getItem("testje");
console.log(test);

请注意,没有控制台错误。只有两个日志。一个来自未定义的控制器,另一个来自按预期返回值的服务:

controllers.js:465 undefined
services.js:122 dit is een testje!

我希望有人能说出这里出了什么问题。如果有任何信息或代码可以提供帮助而我遗漏了,请告诉我。

1 个答案:

答案 0 :(得分:0)

那是因为您的getItem: function(item) {使用承诺来检索结果。

尝试将代码更改为此代码:

getItem: function(item) {
  var query = "SELECT key, value FROM vouchers WHERE key = ?";
  return $cordovaSQLite.execute(db,query,[item]);
});

以这种方式致电您的服务:

StorageService.getItem("testje").then(function(result){
    console.log(result);
});

您将能够查看结果。

我建议你研究一些basic principles承诺:如果你在javascript中使用$ http get和post请求以及任何其他异步内容,你会经常遇到它们。