我想我有一个相对简单的问题,但我一直在思考,甚至谷歌也没有给我一个我可以使用的答案。
基本上我正在尝试复制一些使用 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);
})
}
});
});
}
我也尝试过调用回调函数 when i == results.rows.length
,但这并不能确保所有查询都已完成。
我想你们中的一些人以前也遇到过同样的问题,因此非常感谢有关如何解决此问题并确保仅在 for 循环完成时调用回调函数的任何帮助。
先感谢您。