【问题标题】:Web SQL transaction returns emptyWeb SQL 事务返回空
【发布时间】:2011-10-10 11:44:14
【问题描述】:

这在我使用成功回调直接写入 DOM 时有效。但我想将数据与显示分开,只是一个返回和数组。我尝试过的一切都返回和空数组。有什么想法吗?我需要使用某种闭包吗?

function getExercises(){
    var result = []

    db.transaction(function(tx) {
            tx.executeSql('SELECT id, title, weight, reps FROM exercises', [],function(tx, rs) {
                for(var i=0; i<rs.rows.length; i++) {
                    var row = rs.rows.item(i)
                    result[i] = {
                        id: row['id'],
                        title: row['title'],
                        weight: row['weight'],
                        reps: row['reps']
                    }

                }

            })
        })
    return result;

};

【问题讨论】:

    标签: javascript sql database html closures


    【解决方案1】:

    事务是异步执行的,因此您需要对成功回调的结果进行处理。例如:

    ..
    tx.executeSql('SELECT id, title, weight, reps FROM exercises', [],function(tx, rs) {
          var result = [];
          for(var i=0; i<rs.rows.length; i++) {
              var row = rs.rows.item(i)
              result[i] = {
                        id: row['id'],
                        title: row['title'],
                        weight: row['weight'],
                        reps: row['reps']
             }
          }
          console.log(result);
    });
    ..
    

    会将结果记录到您的控制台。

    在您在问题中发布的代码中,在执行到达 return result 语句之前没有执行任何回调 - 即尚未填充数组 - 因为 executeSql 是异步的:它在执行时不会阻塞并在完成后执行错误或成功回调。

    【讨论】:

      猜你喜欢
      • 2011-12-10
      • 2021-09-11
      • 1970-01-01
      • 1970-01-01
      • 2014-08-24
      • 2012-01-08
      • 1970-01-01
      • 2011-10-17
      • 2016-03-30
      相关资源
      最近更新 更多