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)
看起来这个函数是异步的,并且在时间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)