如果在事务完成后调用,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
我正在使用 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