Web SQL Database + Javascript loop

后端 未结 2 1513
滥情空心
滥情空心 2020-12-01 21:44

I\'m trying to figure this out but can\'t seem to on my own...
I\'m playing with Web SQL DBs and I can\'t get a loop to work properly with it.
I use:



        
相关标签:
2条回答
  • 2020-12-01 22:35

    It looks like the function is asynchronous, and that by the time tx.executeSql fires, the loop have finished looping and i has been changed several times.

    You can solve this with a closure.

    for (var i=0; i<=numberofArticles-1; i++){ 
        function (value) { 
            db.transaction(function (tx) {  
            tx.executeSql('INSERT INTO LOGS (articleID) VALUES (?)',  [value]);
          });
        }(i); // <-- CALL the function
     };
    
    0 讨论(0)
  • 2020-12-01 22:48

    Do it the other way around:

    <script>
        numberofArticles = 5;
        db = openDatabase("websql", "0.1", "web-sql testing", 10000);
        db.transaction(function(tx) {
            tx.executeSql('CREATE TABLE IF NOT EXISTS LOGS (id unique, articleID int)');
        });
        db.transaction(function (tx) {  
            for (var i=0; i<=numberofArticles-1; i++){  
                tx.executeSql('INSERT INTO LOGS (articleID) VALUES (?)',  [i]);
            };
        });
    </script>
    

    And the alternative, the proper way with the loop outside which is unnecessary in this case

        for (var i=0; i<=numberofArticles-1; i++){  
          (function(i) {
            db.transaction(function (tx) {  
                    tx.executeSql('INSERT INTO LOGS (articleID) VALUES (?)',  [i]);
            });
          })(i);
        };
    
    0 讨论(0)
提交回复
热议问题