我写了一个对象,让我更容易使用Phonegap的数据库。 SELECT语句的部分如下:
/********************
* Database SELECT: *
********************/
global.select = function(query)
{
var resultSet = null;
db.transaction(function(tx){ // Do SQL stuff here:
tx.executeSql(query, [], function(tx, results){ // Success:
// When results are there:
if(results != null)
{
// return them for using them:
resultSet = results;
alert("Results are here: " + results);
}
// In all other cases:
else
{
// Return false (error):
return false;
}
}, function(error){ // Error:
global.logError(error);
});
}, function(error){ // Error:
global.logError(error);
}, function(){ // Success:
consoleLog("SELECT complete!");
alert("Return would be: " + resultSet);
return resultSet;
});
} // <-- global.insert = function(query)
让我头痛的部分尝试使用上述功能从表中选择所有内容。我遇到的问题是,通过这样做,我得到了超出我的异步行为......
以下是尝试选择内容的代码:
var results;
if( results = db.select('SELECT * FROM my_table WHERE 1') )
{
alert("Result in index.html success: " + results);
// Do stuff with query results here...
}
else
{
alert("Result in index.html failure: " + results);
}
执行此操作时,
alert("Result in index.html failure: " + results);
是我看到的第一个输出。它似乎在select甚至开始之前执行。我做错了什么?
另外,我不确定如何从SELECT函数返回结果。由于存在嵌套函数,我不知道如何优雅地处理它。关于那部分的任何想法?
万分感谢!
答案 0 :(得分:2)
这些回调是异步的;这就是WebSQL的设计方式。
db.select
在数据可用之前返回;任何访问数据的代码都必须在executeSql
或transaction
回调函数内,或者在那里调用的函数中。