dollcrusader 2017-10-26 01:13 采纳率: 0%
浏览 894

关于websql查找返回值的问题

小弟想对websql进行简单的封装,然而select取值的时候返回值不知道如何取出来,求各位大神指点迷津。代码如下:
图片说明
<!DOCTYPE html>




<pre><code> var db = openDatabase(&#39;mydb&#39;, &#39;1.0&#39;, &#39;mydbname&#39;, 2097152); function query(sql){ db.transaction(function (tx) { tx.executeSql(sql); }); } function select(sql) { var sql1 = sql; db.transaction(function (tx,sql) { //创建表外面用双引号 tx.executeSql(sql1, [], function (a, results) { console.log(results) result = results; }) }); } var result = []; function selectall() { db.transaction(function (tx) { //创建表外面用双引号 tx.executeSql(&quot;select * from role&quot;, [], function (a, results) { for (i = 0; i &lt; results.rows.length; i++){ var what = results.rows.item(i); result.push(what); } console.log(result); }); }); console.log(result); return result; } &lt;/script&gt; </code></pre> <p></head><br> <body></p> <script> 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");


  • 写回答

1条回答 默认 最新

  • lshen01 2023-03-16 10:14
    关注

    参考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函数中返回了该数组。

    评论

报告相同问题?

悬赏问题

  • ¥100 关于使用MATLAB中copularnd函数的问题
  • ¥20 在虚拟机的pycharm上
  • ¥15 jupyterthemes 设置完毕后没有效果
  • ¥15 matlab图像高斯低通滤波
  • ¥15 针对曲面部件的制孔路径规划,大家有什么思路吗
  • ¥15 钢筋实图交点识别,机器视觉代码
  • ¥15 如何在Linux系统中,但是在window系统上idea里面可以正常运行?(相关搜索:jar包)
  • ¥50 400g qsfp 光模块iphy方案
  • ¥15 两块ADC0804用proteus仿真时,出现异常
  • ¥15 关于风控系统,如何去选择