从前一个完整回调中打开新的IndexedDb交易是否安全?

时间:2014-12-22 13:09:15

标签: javascript indexeddb

我需要它的原因是以flatMap样式组合多个(添加,放置)事务。现在我想知道我是否可以从前一个完整回调中初始化一个新事务。它似乎有效,但我永远无法确定它在生产中的作用。例如,如果你从请求onsuccess回调中做类似的事情,它具有事务延续的特殊含义。

问题也可能是,transaction#oncomplete方法调用是一个信号表明事务已完成,还是transaction#oncomplete返回时的信号?

我必须做一些负载测试才能弄明白自己,在简单的测试用例中,它工作,看起来事务结束是transaction#oncomplete方法调用,但如果我开始大量使用它,似乎作为一些写锁定的星球,让我想到这一点。

1 个答案:

答案 0 :(得分:4)

是。启动第二个交易以响应先前交易的"complete"事件是正确的,也是推断排序的最简单方法。

按规格(" steps for committing a transaction"):

  

[...]只有在成功写完交易后才能完成"完成"事件被解雇。

如您所知,您可能会看到来自各个请求的"success"个事件,但整个事务可能会中止(索引一致性,配额等),因此等待"complete"是正确的事情,如果你需要推断第一笔交易在后续交易中的成功。