Web SQL数据库+ Javascript循环

Hen*_*nry 7 javascript sql html5 loops web-sql

我试图解决这个问题,但似乎无法自己...
我正在玩Web SQL数据库,我无法使用循环来正常工作.
我用:

for (var i=0; i<=numberofArticles-1; i++){  
    db.transaction(function (tx) {  
    tx.executeSql('INSERT INTO LOGS (articleID) VALUES (?)',  [i]);
  });
 };
Run Code Online (Sandbox Code Playgroud)

我只得到了5个......我没有得到增量i值.
任何人都可以建议我做错了什么以及我应该考虑什么?

Ric*_*iwi 11

反过来说:

<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>
Run Code Online (Sandbox Code Playgroud)

另外,在这种情况下,外部循环的正确方法是不必要的

    for (var i=0; i<=numberofArticles-1; i++){  
      (function(i) {
        db.transaction(function (tx) {  
                tx.executeSql('INSERT INTO LOGS (articleID) VALUES (?)',  [i]);
        });
      })(i);
    };
Run Code Online (Sandbox Code Playgroud)


Que*_*tin 6

看起来这个函数是异步的,并且在时间tx.executeSql触发时,循环已经完成循环并且i已经多次更改.

你可以用一个闭包解决这个问题.

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
 };
Run Code Online (Sandbox Code Playgroud)

  • 你通过在它的末尾贴上`(any args)`来调用一个函数.`function(){}()`就像`function foo(){}; foo();`除了它不会保留`foo`以供以后使用. (4认同)