我正在尝试调用一个从我的 Web SQL 数据库中选择值的函数。我想将 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()
函数以接受回调作为参数,它将调用结果而不是返回结果:
/** 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);
});
}
关于javascript - Web SQL SELECT 事务返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7816509/