Cordova / Phonegap数据库操作内部for循环

时间:2015-07-17 14:02:26

标签: database cordova sqlite

我必须循环一些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;迭代。我试图将插入放在更新回调中,但仍然得到相同的结果。

1 个答案:

答案 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 /