小弟想对websql进行简单的封装,然而select取值的时候返回值不知道如何取出来,求各位大神指点迷津。代码如下:
<!DOCTYPE html>
参考GPT和自己的思路:
根据你的代码,你在select函数内部定义了一个名为result的数组,并在查询到结果后将其赋值为查询结果。但是,由于JavaScript的作用域规则,你在selectall函数中访问的result是在其外部定义的,所以在select函数中赋值的result对selectall函数来说是不可见的。
为了解决这个问题,你需要将result的定义和赋值操作移到selectall函数中,以便确保result的作用域可以正确地覆盖整个函数。同时,你需要将select函数返回的结果对象作为回调函数的参数进行处理,而不是将其赋值给一个外部变量。
下面是修改过的代码:
var db = openDatabase('mydb', '1.0', 'mydbname', 2097152);
function query(sql){
db.transaction(function (tx) {
tx.executeSql(sql);
});
}
function select(sql, callback) {
db.transaction(function (tx) {
tx.executeSql(sql, [], function (tx, results) {
callback(results);
});
});
}
function selectall() {
var result = [];
select("select * from role", function (results) {
for (i = 0; i < results.rows.length; i++){
var what = results.rows.item(i);
result.push(what);
}
console.log(result);
});
return result;
}
query("CREATE TABLE IF NOT EXISTS role ('id' INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,'name' TEXT,'hobby' TEXT,date timestamp not null default (datetime('now','localtime')))")
query("insert into role(name,hobby) values('gouzi','wanshe')");
query("insert into role(name,hobby) values('gouzi','wanshe')");
console.log(selectall());
query("drop table if exists role");
</script>
在修改过的代码中,我们将select函数的结果用回调函数传递出去,在selectall函数内部定义了一个新的result数组,并在回调函数中将查询到的结果添加到该数组中。最后,我们在selectall函数中返回了该数组。