我正在建造一个显示播放按钮或停止按钮的表格。 (以及其他一些东西)
for(var i = 0; i < result.length; i++){
var current = result[i].split("$");
if (CheckRunning(current[0])){
t = t + "<tr><td><img alt='stop' id='img"+i+"' src='stop.png' onclick='ChangeButton(\"img"+i+"\");'/>";
} else {
t = t + "<tr><td><img alt='play' id='img"+i+"' src='play.png' onclick='ChangeButton(\"img"+i+"\");'/>";
}}
这里的问题是CheckRunning方法。它打开一个数据库,这是一个异步方法。我不能简单地做一个返回true / false。那么解决方案是什么?无论如何,这是代码:
var tabel;
var running = false;
function CheckRunning(tabel){
this.tabel = "tabel"+tabel+"";
var db = window.openDatabase(this.tabel, "1.0", this.tabel, 1000000);
db.transaction(checkrunningDB, checkerrorCB);
console.log(this.running);
return this.running;
}
function checkrunningDB(tx) {
tx.executeSql('SELECT max(id), sluttime FROM '+this.tabel, [], checkrunningSuccess, checkerrorCB);
}
function checkrunningSuccess(tx, results) {
if (results.rows.item(0).sluttime != null){
this.running = false;
} else{
this.running = true;
}
}
function checkerrorCB(err) {
this.running = false;
console.log(err);
}
答案 0 :(得分:0)
将回调函数传递给CheckRunning
:
CheckRunning(current[0], function(isRunning){...})
...
function CheckRunning(tabel, callback)
{
var isRunning = null; // we don't know yet
....
callback(isRunning);
}
它与你的tx.executeSql
函数类似,它将checkRunningSuccess作为回调。在这种情况下,函数名称被硬编码为checkRunningSuccess,您可以在checkRunning中执行相同的操作。
顺便说一句,如果这是一个运行SQL查询的公共Web应用程序,则会使您容易受到SQL injection attacks的攻击。</ p>