【发布时间】: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