【问题标题】:Store data from SQLite3 (win-rt) database in javascript variable将 SQLite3 (win-rt) 数据库中的数据存储在 javascript 变量中
【发布时间】:2015-01-30 18:21:45
【问题描述】:

我正在使用 Visual Studio Express 2012 和 SQLite3-winrt 数据库创建一个 Windows Metro 应用程序。我的问题是我可以从数据库中插入和读取数据,但我无法将读取的任何数据存储在本地 javascript 变量中。

function getInfo()
{   
    SQLite3JS.openAsync(dbPath)
    .then(function (db)
    {
        db.runAsync('CREATE TABLE IF NOT EXISTS Resource (resourceName TEXT, resourceType TEXT, id INT PRIMARY KEY)')
        return db.eachAsync('SELECT * FROM Resource', function (row)
        {
            console.log('Get a ' + row.resourceName + ' for' + row.resourceType);
        });
 })

}

当数据插入表中时,上面的代码可以正常工作,但我不能这样做:

function getInfo()
{   
    var rName;
    SQLite3JS.openAsync(dbPath)
    .then(function (db)
    {
        db.runAsync('CREATE TABLE IF NOT EXISTS Item (resourceName TEXT, resourceType TEXT, id INT PRIMARY KEY)')
        return db.eachAsync('SELECT * FROM Resource', function (row)
        {
            console.log('Get a ' + row.resourceName + ' for' + row.resourceType);
            rName = row.resourceName;
        });
     })
return rName;
}

rName 最终还是未定义,即使我将其声明为全局变量。

我怀疑这与范围有关。任何帮助将不胜感激。

注意 - 我也尝试在写有 rName = row.resourceName 的行返回 rName,但这也没有用。

【问题讨论】:

  • 您的函数在任何异步工作完成之前立即返回rName。您需要将一组异步延续返回给调用者。
  • 你能举个例子并说明 return 语句应该在哪里吗?

标签: javascript visual-studio-2012 sqlite scope microsoft-metro


【解决方案1】:

我没有安装 SQLite,但通常您希望 return 嵌套 then 函数的结果。然后调用者使用then 来获得结果。比如:

function useResults()
{
  getInfo().then(function (rName) { console.log(rName); });
}

function getInfo()
{
  var rName;
  return SQLite3JS.openAsync(dbPath).then(function (db) {
    return db.runAsync('CREATE TABLE IF NOT EXISTS Item (resourceName TEXT, resourceType TEXT, id INT PRIMARY KEY)').then(function () {
      return db.eachAsync('SELECT * FROM Resource', function (row) {
        console.log('Get a ' + row.resourceName + ' for' + row.resourceType);
        rName = row.resourceName;
      }).then(function()
      {
        return rName;
      });
    });
  });
}

虽然这只会有效地返回姓氏。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-05
    • 2011-10-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多