0

0

数据持久化_IndexedDB事务处理

夢幻星辰

夢幻星辰

发布时间:2025-11-29 21:27:07

|

376人浏览过

|

来源于php中文网

原创

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

数据持久化_indexeddb事务处理

IndexedDB 的事务处理是数据持久化操作的核心机制,确保对数据库的读写操作具备一致性与可靠性。在执行增删改查(CRUD)操作时,所有操作都必须在事务上下文中进行,不能脱离事务直接操作数据。

事务的基本概念

事务是指一组数据库操作,它们作为一个整体被执行。IndexedDB 中的事务支持原子性:要么全部成功,要么全部失败回滚。每个事务都绑定到一个或多个对象仓库(Object Store),并指定访问模式。

事务有三种访问模式:

  • readonly:只读事务,用于查询数据(如 get、getAll)
  • readwrite:读写事务,用于添加、更新、删除数据
  • versionchange:用于数据库结构变更,如创建/删除对象仓库或索引

事务一旦创建,必须通过显式完成操作(如调用 transaction.commit())或等待所有请求结束后自动提交。但通常不手动调用 commit,而是让其自然结束。

创建和使用事务

要开始一个事务,需在打开数据库连接后调用 transaction() 方法:

const transaction = db.transaction(['users'], 'readwrite');
const store = transaction.objectStore('users');
store.add({id: 1, name: 'Alice'});

上面代码创建了一个针对 'users' 对象仓库的读写事务,并向其中添加一条记录。事务会监听所有操作的状态,当所有请求完成且无错误时,事务自动提交。

可以监听事务的以下事件:

  • oncomplete:事务成功完成时触发
  • onerror:事务出错时触发
  • onabort:事务被中止时触发(如某个请求失败)

示例:

杰易OA办公自动化系统6.0
杰易OA办公自动化系统6.0

基于Intranet/Internet 的Web下的办公自动化系统,采用了当今最先进的PHP技术,是综合大量用户的需求,经过充分的用户论证的基础上开发出来的,独特的即时信息、短信、电子邮件系统、完善的工作流、数据库安全备份等功能使得信息在企业内部传递效率极大提高,信息传递过程中耗费降到最低。办公人员得以从繁杂的日常办公事务处理中解放出来,参与更多的富于思考性和创造性的工作。系统力求突出体系结构简明

下载
transaction.oncomplete = () => {
  console.log('事务已完成');
};
transaction.onerror = (event) => {
  console.error('事务失败:', event.target.error);
};

事务的作用域与生命周期

IndexedDB 事务是懒执行的,只有在第一个请求发出时才真正启动。事务的生命周期与其关联的操作紧密相关:只要还有待处理的请求,事务就保持活动状态;一旦所有请求完成,事务自动提交。

常见误区是认为事务可以跨事件循环使用。例如下面的写法是错误的:

const transaction = db.transaction(['users'], 'readwrite');
const store = transaction.objectStore('users');
setTimeout(() => {
  store.add(data); // 报错!事务已关闭
}, 100);

因为事务在同步代码执行完后已关闭,异步延迟调用会导致操作失败。正确做法是在需要操作时重新开启事务。

错误处理与事务中止

如果事务中的任意请求失败(如主键冲突、存储空间不足),整个事务会被中止,不会提交。此时 onabortonerror 会被触发。

开发中应始终监听错误事件,避免数据不一致:

transaction.onabort = () => {
  console.warn('事务被中止,可能原因:', transaction.error);
};

某些操作如添加已存在的主键数据会抛出 ConstraintError,可在错误回调中做相应处理,比如改用 put 更新数据。

基本上就这些。掌握事务的生命周期、作用域和错误处理方式,才能安全可靠地使用 IndexedDB 实现前端数据持久化。

相关专题

更多
scripterror怎么解决
scripterror怎么解决

scripterror的解决办法有检查语法、文件路径、检查网络连接、浏览器兼容性、使用try-catch语句、使用开发者工具进行调试、更新浏览器和JavaScript库或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

187

2023.10.18

500error怎么解决
500error怎么解决

500error的解决办法有检查服务器日志、检查代码、检查服务器配置、更新软件版本、重新启动服务、调试代码和寻求帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

271

2023.10.25

c语言const用法
c语言const用法

const是关键字,可以用于声明常量、函数参数中的const修饰符、const修饰函数返回值、const修饰指针。详细介绍:1、声明常量,const关键字可用于声明常量,常量的值在程序运行期间不可修改,常量可以是基本数据类型,如整数、浮点数、字符等,也可是自定义的数据类型;2、函数参数中的const修饰符,const关键字可用于函数的参数中,表示该参数在函数内部不可修改等等。

523

2023.09.20

console接口是干嘛的
console接口是干嘛的

console接口是一种用于在计算机命令行或浏览器开发工具中输出信息的工具,提供了一种简单的方式来记录和查看应用程序的输出结果和调试信息。本专题为大家提供console接口相关的各种文章、以及下载和课程。

411

2023.08.08

console.log是什么
console.log是什么

console.log 是 javascript 函数,用于在浏览器控制台中输出信息,便于调试和故障排除。想了解更多console.log的相关内容,可以阅读本专题下面的文章。

487

2024.05.29

数据库三范式
数据库三范式

数据库三范式是一种设计规范,用于规范化关系型数据库中的数据结构,它通过消除冗余数据、提高数据库性能和数据一致性,提供了一种有效的数据库设计方法。本专题提供数据库三范式相关的文章、下载和课程。

344

2023.06.29

如何删除数据库
如何删除数据库

删除数据库是指在MySQL中完全移除一个数据库及其所包含的所有数据和结构,作用包括:1、释放存储空间;2、确保数据的安全性;3、提高数据库的整体性能,加速查询和操作的执行速度。尽管删除数据库具有一些好处,但在执行任何删除操作之前,务必谨慎操作,并备份重要的数据。删除数据库将永久性地删除所有相关数据和结构,无法回滚。

2074

2023.08.14

vb怎么连接数据库
vb怎么连接数据库

在VB中,连接数据库通常使用ADO(ActiveX 数据对象)或 DAO(Data Access Objects)这两个技术来实现:1、引入ADO库;2、创建ADO连接对象;3、配置连接字符串;4、打开连接;5、执行SQL语句;6、处理查询结果;7、关闭连接即可。

347

2023.08.31

Java 桌面应用开发(JavaFX 实战)
Java 桌面应用开发(JavaFX 实战)

本专题系统讲解 Java 在桌面应用开发领域的实战应用,重点围绕 JavaFX 框架,涵盖界面布局、控件使用、事件处理、FXML、样式美化(CSS)、多线程与UI响应优化,以及桌面应用的打包与发布。通过完整示例项目,帮助学习者掌握 使用 Java 构建现代化、跨平台桌面应用程序的核心能力。

36

2026.01.14

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Django 教程
Django 教程

共28课时 | 3.1万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.1万人学习

Sass 教程
Sass 教程

共14课时 | 0.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号