Web SQL事务返回空



当我使用成功回调直接写入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;
};

事务是异步执行的,因此您需要对成功回调的结果执行一些操作。例如:

..
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是异步的:它在执行时不会阻塞,只是在完成时执行错误或成功回调。

最新更新