我正试图编写一个函数来确定html5 websql db表是否为空。代码如下。我在里面放了警报,看看发生了什么。当这个函数运行时,首先弹出底部的警报。虽然表为空,但返回值为false。
function tableisempty() {
tf = false;
query = "SELECT * FROM OLL;";
localDB.transaction(function(transaction){
transaction.executeSql(query, [], function(tx, results){
if (results.rows.length == 0) {
tf = true;
alert ("table has "+results.rows.length+" rows. returning "+tf);
} else {
tf = false;
alert ("table is not empty. returning "+tf);
}
}, errorHandler);
});
alert ("return value is " + tf);
return tf;
}
根据您的评论和w3页面,查询是异步发生的。你的问题的解决方案真的取决于你的js代码结构。
选项1:
将tf
移出函数(并在前面添加一个var
),并完全删除返回和警报。当你的回调函数被调用时,它会改变tf的值,你的其他代码可以引用它,这是正常的。
选项2:
根据这个SO问题,您可以将调用(我假设在代码中的其他地方)从openDatabase
更改为openDatabaseSync
以启用同步操作。