如果已经完成,则在调用IndexDB时不会立即开始事务

问题描述 投票:0回答:2

我正在使用dexiejs在Indexdb表中插入数据(大约1万条记录)。

rw事务完成后,我正在使用以下方法进行检查:

  try {
    await QDB.transaction("rw", table1, table1, async tx => {
      //ALSO CHECK TX
      tx.on("complete", () => console.log("COMPLETED"));
      //here goes the bulkadd code ...
    });
    console.log("COMPLETED");
  } catch (e) {
    console.log(e);
  }

因此,在完成上述操作之后,我尝试执行另一个仅修改某些记录的事务,但是最后一个事务甚至开始之前大约需要20秒钟。

我什至在chrome profiler中跟踪了整个过程,在最后一次交易开始之前的20年代,浏览器似乎相对容易一些。

为什么?

提前感谢

javascript indexeddb dexie dexiejs
2个回答
1
投票

复制评论:

我仅使用一项交易就解决了。问题的根源虽然是我在等待中使用嵌套异步函数Dexie.waitFor()。我认为在waitFor中使用嵌套的Promise导致内部承诺被延迟调用]


0
投票

您如何检测第二个事务何时“开始”-解决它中的第一个操作时是它?

无论如何,可能有几个原因。一个是如果您正在进行另一个只读事务,该事务将阻止下一个事务完成。我想,另一个可能是在处理完成后,处理IndexedDB数据处理的后台线程可能正在忙于清理工作。如果是这样的话,我想它不会在每次运行后发生,但是会偶尔发生。

© www.soinside.com 2019 - 2024. All rights reserved.