IndexedDB事务确保数据操作的一致性与可靠性,所有CRUD操作必须在事务中执行。事务具有原子性,支持readonly、readwrite和versionchange三种模式,绑定一个或多个对象仓库。事务通过db.transaction()创建,操作完成后自动提交,可监听oncomplete、onerror和onabort事件。事务懒启动,生命周期依赖待处理请求,不可跨事件循环使用,如setTimeout中调用会报错。任一请求失败将中止整个事务并触发回滚,需正确处理ConstraintError等错误,确保数据一致性。掌握事务机制是安全使用IndexedDB的关键。

IndexedDB 的事务处理是数据持久化操作的核心机制,确保对数据库的读写操作具备一致性与可靠性。在执行增删改查(CRUD)操作时,所有操作都必须在事务上下文中进行,不能脱离事务直接操作数据。
事务是指一组数据库操作,它们作为一个整体被执行。IndexedDB 中的事务支持原子性:要么全部成功,要么全部失败回滚。每个事务都绑定到一个或多个对象仓库(Object Store),并指定访问模式。
事务有三种访问模式:
事务一旦创建,必须通过显式完成操作(如调用 transaction.commit())或等待所有请求结束后自动提交。但通常不手动调用 commit,而是让其自然结束。
要开始一个事务,需在打开数据库连接后调用 transaction() 方法:
const transaction = db.transaction(['users'], 'readwrite');上面代码创建了一个针对 'users' 对象仓库的读写事务,并向其中添加一条记录。事务会监听所有操作的状态,当所有请求完成且无错误时,事务自动提交。
可以监听事务的以下事件:
示例:
transaction.oncomplete = () => {IndexedDB 事务是懒执行的,只有在第一个请求发出时才真正启动。事务的生命周期与其关联的操作紧密相关:只要还有待处理的请求,事务就保持活动状态;一旦所有请求完成,事务自动提交。
常见误区是认为事务可以跨事件循环使用。例如下面的写法是错误的:
const transaction = db.transaction(['users'], 'readwrite');因为事务在同步代码执行完后已关闭,异步延迟调用会导致操作失败。正确做法是在需要操作时重新开启事务。
如果事务中的任意请求失败(如主键冲突、存储空间不足),整个事务会被中止,不会提交。此时 onabort 和 onerror 会被触发。
开发中应始终监听错误事件,避免数据不一致:
transaction.onabort = () => {某些操作如添加已存在的主键数据会抛出 ConstraintError,可在错误回调中做相应处理,比如改用 put 更新数据。
基本上就这些。掌握事务的生命周期、作用域和错误处理方式,才能安全可靠地使用 IndexedDB 实现前端数据持久化。
以上就是数据持久化_IndexedDB事务处理的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号