我必须循环一些SELECT结果。在这个循环中,我需要执行UPDATE和INSERT事务。
问题是SQL事务是异步且缓慢的,因此循环在SQL操作执行之前结束,这是我的代码的工作方式:
tx.executeSql('SELECT ... FROM ... WHERE ...', [],
function(tx, results){
for (var i=0; i<results.rows.length; i++){
var id = results.rows.item(i).id;
tx.executeSql('UPDATE ... SET ...=... WHERE id="'+ id +'";', [],
function(tx, results){
console.log("update ok");
}, function(){
console.error("Function ERROR");
});
tx.executeSql('INSERT INTO ... (...) VALUES (...,"'+ id +'",...)', [],
function(tx, results){
console.log("insert ok");
}, function(){
console.error("Function ERROR");
});
}
}, function(){
console.error("Function ERROR");
});
for循环比DB操作运行得更快,所有uptades和插入最终使用最后一个&#39; i&#39;迭代。我试图将插入放在更新回调中,但仍然得到相同的结果。
答案 0 :(得分:0)
问题解决了!
tx.executeSql('SELECT ... FROM ... WHERE ...', [],
function(tx, results){
for (var i=0; i<results.rows.length; i++){
var id = results.rows.item(i).id;
var transaction = function(valueID){
tx.executeSql('UPDATE ... SET ...=... WHERE id="'+ id +'";', [],
function(tx, results){
console.log("update ok");
}, function(){
console.error("Function ERROR");
});
tx.executeSql('INSERT INTO ... (...) VALUES (...,"'+ id +'",...)', [],
function(tx, results){
console.log("insert ok");
}, function(){
console.error("Function ERROR");
});
}(id)
}
}, function(){
console.error("Function ERROR");
});
必须将其包装在函数中以使值正确。
希望它可以帮助别人。 O /