我写了一个对象,让我可以更容易地使用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-function返回结果。因为有嵌套的函数,我不知道如何优雅地处理它。这部分有什么想法吗?
万分感谢!
发布于 2013-07-23 01:23:54
这些回调是异步的;这就是WebSQL的设计。
db.select在数据可用之前返回;任何访问数据的代码都必须在executeSql或transaction回调函数中,或者在从那里调用的函数中。
https://stackoverflow.com/questions/17793081
复制相似问题