我试图从我的Web SQL数据库中调用一个SELECTS值的函数。我想将SELECTED值返回到父函数内的变量中。但是,无论是否为全局变量,变量始终返回空白。
可以看到selectRow函数内部的console.log记录了数据库查询中的正确值,但是console.log在initDB函数中显示为空白。
我还注意到,空白日志显示在selectRow函数内部的日志之前。我找到了一些论坛,人们在这里谈论数据库事务是异步的。我知道这就是为什么我的变量返回为空白的原因。但是,在无数次犹豫不决之后,我仍然找不到解决此异步问题的方法。
/** Initialize Database **/ function initDB(){ createTable(); var pleaseWork = selectRow("SELECT * FROM planets;"); console.log(pleaseWork); } /** Select Row from Table **/ function selectRow(query){ var result = []; db.transaction(function (tx) { tx.executeSql(query, [], function(tx, rs){ for(var i=0; i<rs.rows.length; i++) { var row = rs.rows.item(i) result[i] = { id: row['id'], name: row['name'] } } console.log(result); }, errorHandler); }); return result; }
您可以更改selectRow()函数以将回调作为参数接受,该回调将与结果一起调用而不是返回结果:
selectRow()
/** Initialize Database **/ function initDB(){ createTable(); selectRow("SELECT * FROM planets;", function(pleaseWork) { console.log(pleaseWork); // any further processing here }); } /** Select Row from Table **/ function selectRow(query, callBack){ // <-- extra param var result = []; db.transaction(function (tx) { tx.executeSql(query, [], function(tx, rs){ for(var i=0; i<rs.rows.length; i++) { var row = rs.rows.item(i) result[i] = { id: row['id'], name: row['name'] } } console.log(result); callBack(result); // <-- new bit here }, errorHandler); }); }