javascript - Web SQL SELECT 事务返回值

标签 javascript sql html web

我正在尝试调用一个从我的 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/

相关文章:

html - 如何根据是否正在输入文本区域来更改文本区域的属性

html - HTML 中的发音

javascript - 查找仅具有部分已知值的字符串

javascript - Knockout Observable Array 不绑定(bind) html 中的 future 元素

c# - 存储过程中 SQL Server 查询的性能问题

sql - 从 SELECT 语句更新列

sql - 奇怪的 NOT IN 运算符行为

javascript - 如何使用 Knockout.js 在鼠标悬停时更改 CSS 类?

javascript - 使用 jqprint 使用 CSS 打印特定的 DIV

javascript - 如何在html表单中为所有空字段和必填字段显示 "Please fill out this field"?