如何存储 websql .executeSql 结果到一个全局变量中

How to store websql .executeSql results in a global variable?

本文关键字:全局变量 一个 executeSql 何存储 存储 websql 结果      更新时间:2023-09-26

如何访问

tx.executeSql('select query for a table',[],sucessCB);
function sucessCB(tx, results){  //<--- this results param
    console.log(results.row.item(0).name);
}

我尝试了类似的东西

function(){
    var tab = [];
    tx.executeSql('select query for a table',[],sucessCB);
    function sucessCB(tx, results){  //<--- this results param
        console.log(results.row.item(0).name);
        for(i=0;i<results.length;i++){
            tab.push(results.row.item(i))
        }
    }
    console.log(tab);  //<--- this returns always null
}

如何在回调函数之外访问变量,或者有没有办法直接将 SQL 结果存储在变量中。有没有办法

tx.executeSql('another select query',[],function(tx, results, tab ){  // <-- this inside sucessCB
console.log(tab);
});

在所有方案中,变量均为空。有没有另一种方法可以做到这一点。任何建议都会有所帮助,谢谢。

按如下方式使用回调:

var querySql = function(sql, callback) {
  tx.executeSql(sql,[],sucessCB);
  function sucessCB(tx, results){  //<--- this results param
    var tab = [];
    for(i=0;i<results.length;i++){
        tab.push(results.row.item(i))
    }
    callback(tab);
  }
}
querySql('select query for a table', function(result) {
   console.log(result); 
}

但是,使用延迟概念可以更好地解决此类问题。

var querySql = function(sql) {
  var df = $.Deferred();
  tx.executeSql(sql,[],sucessCB, errCB);
  function sucessCB(tx, results){  //<--- this results param
    var tab = [];
    for(i=0;i<results.length;i++){
        tab.push(results.row.item(i))
    }
    df.resolve(tab);
  }
  function errCB(tx, e) {
    df.reject(e);
  }
}
querySql('select query for a table').done(function(result) {
   console.log(result); 
}