JS 上 for 循环内的 WebSQL 事务
WebSQL transaction inside for loop on JS
我目前正在尝试将数组中的数据插入到 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 以防出现问题,结果是一样的。
仅供参考 table 是使用以下方法创建的:
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]);
}
});
我目前正在尝试将数组中的数据插入到 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 以防出现问题,结果是一样的。
仅供参考 table 是使用以下方法创建的:
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]);
}
});