当我使用成功回调直接写入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是异步的:它在执行时不会阻塞,只是在完成时执行错误或成功回调。