当indexedDB中的数据库操作成功但事务立即失败时会发生什么

时间:2018-02-19 09:52:29

标签: javascript callback indexeddb

我有一个DB操作,它将值存储到索引的DB中。我正在寻找我的手术成功的情况的答案。那就是我成功地将我的值存储在数据库中。但是在存储时,如果事务立即失败,存储的数据会发生什么?

另外,如果事务失败,transaction.complete()执行或transaction.onerror()会执行吗?

1 个答案:

答案 0 :(得分:1)

你的陈述有冲突。然而,基本要素是:

  • 交易提供了一段时间,您可以执行请求
  • 交易可以提供多个请求
  • 任何单个请求成功并不意味着交易成功
  • 任何个别请求失败通常意味着交易将失败
  • 事务是请求和数据库之间的缓冲区,虽然请求可能完成,但在事务完成之前,数据库实际上并未被修改
  • 请注意,由于某些indexedDB实现会过早地报告事务(在将数据写入存储的IO操作实际完成之前),这会使事情略微混乱。

假设您有一个包含两个操作(请求)的事务。让我们说第一个请求完成。数据是否已存储?不,我们说第二个请求完成了。数据是否已存储?没有。 然后事务完成。数据是否已存储?是。

如果存储数据时出现问题,则交易将失败(除了关于某些实施如何过早地提前刷新到磁盘的小技术性。)

如果事务失败,数据库将保持在事务启动之前的状态,忽略并发事务。

如果请求失败,则事务最终失败,如上所述,数据库在事务启动之前保持其状态。将回滚属于同一失败事务的所有请求。

想想这就像在您喜欢的文本编辑器中打开文档,键入一些单词,然后关闭文档而不保存。

事务成功完成时会触发complete事件。事务未成功完成时会触发错误事件。