使用回调从JavaScript中的Web SQL数据库返回结果集

Use of Callback to return a Result Set from Web-SQL Database in JavaScript

本文关键字:数据库 SQL 返回 结果 Web 中的 回调 JavaScript      更新时间:2023-09-26

下面是我的代码,我想返回Result Set并在代码中的任何位置使用它。最后一行也打印"0",但我希望该值包含Result Set中的行数
我该怎么做?

var querySql = function(sql, callback) {
    var tab = [];   
    db.transaction(function(tx) {       
        tx.executeSql(sql,[],function(tx, results){         
            for(i = 0; i < results.rows.length; i++){
                tab.push(results.rows);                     
            }
        callback(tab);      
        });
    });
}
var queryLength = 0;
querySql('SELECT * FROM contacts', function(result) {
    console.log("RESULTS: " + result.length); 
    queryLength = result.length;
    console.log("QUERY_LENGTH: " + queryLength); 
    for(var i = 0; i < result.length; i++){
        alert("ITEMS: " + result[i].item(i)['firstname']);
    }   
});
console.log("QUERY_LENGTH_1: " + queryLength);

我相信在您的for循环中,您需要使用item()方法访问项目,如下所示:

tx.executeSql(sql,[],function(tx, results){         
  for(i = 0; i < results.rows.length; i++){
      tab.push(results.rows.item(i)); // <--------
  }
    callback(tab);      
});

这应该会用您的记录填充tab

此外,您的控制台语句需要在querySql闭包中:

querySql('SELECT * FROM contacts', function(result) {
    //...
    console.log("QUERY_LENGTH_1: " + queryLength);
});

否则,在下一个事件循环中执行事务之前,它将首先被评估