javascript - JS 上的 for 循环内的 WebSQL 事务

标签 javascript sqlite transactions web-sql

我目前正在尝试将数据从数组插入到 WebSQL 数据库中,但得到了一些奇怪的结果。我认为这是因为它是异步的。

问题是我试图使用 for 循环内的事务插入数据,该循环也嵌套在另一个事务中。该代码几乎可以工作,但仅完成循环的最终事务。

                    for (i = 0; i < array.gArr.length; i++)
                    {
                        var group_id = array.gArr[i].group_id;
                        var title = array.gArr[i].title;
                        var description = array.gArr[i].description;
                        var photo = array.gArr[i].default_photo;


                        tx_num = "tx" + i;


                        db.transaction(function (tx_num) {     
                            tx_num.executeSql("INSERT OR IGNORE INTO my_groups(group_id, title, description, photo_url) VALUES (?,?,?,?)", [group_id, title, description, photo]);
                        });


                    }

tx_num 存在的原因是试图查看它是否是由于具有相同的 tx 名称。

我也尝试过仅使用 INSERT INTO 以防这会导致问题,并且结果是相同的。

仅供引用,该表是使用以下方法创建的:

db.transaction(function (tx) {

    tx.executeSql('CREATE TABLE IF NOT EXISTS my_groups(group_id UNIQUE, title, description, photo_url)');

});

如有任何帮助,我们将不胜感激。

最佳答案

我已经找到了解决方案。

似乎每次循环完成时事务都会被覆盖,因此它仅完成最终事务。为了确保所有这些都运行,您需要将循环包含在 db.transaction 中。通过这样做,所有事务都会在 db.transaction 运行时运行。这都是由于异步性质造成的。

以下是供将来引用的代码:

db.transaction(function (tx1) {     
    for (i = 0; i < array.gArr.length; i++)
    {
        var group_id = array.gArr[i].group_id;
        var title = array.gArr[i].title;
        var description = array.gArr[i].description;
        var photo = array.gArr[i].default_photo;

        tx1.executeSql("INSERT OR REPLACE INTO my_groups(group_id, title, description, photo_url) VALUES (?,?,?,?)", [group_id, title, description, photo]);

    }

});

关于javascript - JS 上的 for 循环内的 WebSQL 事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32104668/

相关文章:

Javascript 替换不适用于 jQuery

javascript - Aurelia class.bind 与 checked.bind 问题

ios - 将大型CSV文件加载到核心数据中最快的方法是什么

c# - 我是否应该始终在 nhibernate 中使用事务(即使是简单的读写)?

database - 我什么时候应该考虑使用内存数据库以及需要注意的问题是什么?

mysql - rails : implement auditing of table insertions/updates

javascript - SVG 投影分层

ios - 使用核心数据更新对象会插入一条新记录

c# - 受密码保护的 SQLite 数据库

javascript - 永远循环并提供增量时间