将SQLite3(win rt)数据库中的数据存储在javascript变量中
我正在使用Visual Studio Express 2012和SQLite3 winrt数据库创建一个Windows Metro应用程序。我的问题是,我可以从数据库中插入和读取数据,但我无法将我读取的任何数据存储在本地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
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语句应该在哪里吗?