Tyl*_*hea 6 javascript sql html5 web
我试图调用一个从我的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;
}
Run Code Online (Sandbox Code Playgroud)
nnn*_*nnn 17
您可以将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);
});
}
Run Code Online (Sandbox Code Playgroud)