将SQLite3(win rt)数据库中的数据存储在javascript变量中

将SQLite3(win rt)数据库中的数据存储在javascript变量中,javascript,visual-studio-2012,sqlite,scope,microsoft-metro,Javascript,Visual Studio 2012,Sqlite,Scope,Microsoft Metro,我正在使用Visual Studio Express 2012和SQLite3 winrt数据库创建一个Windows Metro应用程序。我的问题是,我可以从数据库中插入和读取数据,但我无法将我读取的任何数据存储在本地javascript变量中 function getInfo() { SQLite3JS.openAsync(dbPath) .then(function (db) { db.runAsync('CREATE TABLE IF NOT

我正在使用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声明为一个全局变量,它也会被取消定义

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

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


注意-我还尝试在显示rName=row.resourceName的行中返回rName,但这也不起作用。

我没有安装SQLite,但通常您希望返回嵌套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;
      });
    });
  });
}

尽管这只会有效地返回姓氏。

在异步工作完成之前,函数会立即返回rName。您需要向调用者返回一组异步continuations。您能给出一个示例并说明return语句应该在哪里吗?