我猜我有一个相对简单的问题,但我一直在打转,即使Google也没有给我一个可行的答案。
基本上,我正在尝试复制存储在WebSQL本地的一些记录。 复制不是问题,但我需要知道何时完成所有复制操作,然后我的程序才能继续执行。
WebSQL调用是异步的,因此通常情况下唯一的方法是使用回调函数来处理这些事情。但是,由于查询是在for循环内完成的,因此我不能使用回调函数,因为如下所示,它将在第一个完成的查询处触发。
代码如下:
基本上,我正在尝试复制存储在WebSQL本地的一些记录。 复制不是问题,但我需要知道何时完成所有复制操作,然后我的程序才能继续执行。
WebSQL调用是异步的,因此通常情况下唯一的方法是使用回调函数来处理这些事情。但是,由于查询是在for循环内完成的,因此我不能使用回调函数,因为如下所示,它将在第一个完成的查询处触发。
代码如下:
function copyRecords(old_parent_id, new_parent_id, callback){
var db = openDatabase('test', '1.0', 'test', 50 * 1024 * 1024);
db.transaction(function (tx) {
tx.executeSql('SELECT * FROM table WHERE parent_id = ?', [old_parent_id], function(tx, results){
for(var i = 0; i < results.rows.length; i++){
db.transaction(function (tx2) {
tx2.executeSql('INSERT INTO table (name, parent_id) VALUES (?, ?)', [results.rows.item(i).name, new_parent_id], callback);
})
}
});
});
}
我也尝试在i==results.rows.length时调用回调函数,但这并不能确保所有查询都已完成。
我猜你们中的一些人之前也遇到过这个问题,希望能帮忙解决并确保只有在for循环完成后才调用回调函数。
提前感谢。