SQL

Web SQL SELECT事务返回值

发布于 2021-03-27 16:42:54

我试图从我的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;
}
关注者
0
被浏览
118
1 个回答
  • 面试哥
    面试哥 2021-03-27
    为面试而生,有面试问题,就找面试哥。

    您可以更改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);
       });
    }
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看