如果在事务完成后调用,IndexedDB 中的事务不会立即开始

Transaction in IndexDB does not start immediately if called after one already completed

我正在使用 dexiejs 在 Indexdb 中插入数据 table(大约 10k 条记录)。

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);
  }

所以在上面完成之后,我接着尝试执行另一个只修改某些记录的事务,但是在最后一个事务开始之前大约需要 20s。

我什至在 chrome 分析器中追踪了整个过程,浏览器在最后一次交易开始前的 20 多岁似乎相对轻松。

这是为什么?

提前致谢

您如何检测第二个事务何时 "starts" - 是您在其中的第一个操作被解析的时间吗?

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

复制评论:

I solved it by using only one transaction. The source of the problem though was that I was using nested async function with await Dexie.waitFor(). I think that using nested promises inside waitFor causes the inner promises to be called with some delay