【发布时间】:2012-10-16 11:26:44
【问题描述】:
我想我有一个相对简单的问题,但我一直在思考,甚至谷歌也没有给我一个我可以使用的答案。
基本上,我正在尝试使用 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 循环完成时调用回调函数的帮助。
提前谢谢你。
【问题讨论】:
-
是否可以通过结果将内部事务移出循环,使INSERT的循环完全进入事务内部?
标签: javascript for-loop web-sql