HTML5中封装Promise风格的数据库初始化工具函数

openDB 是一个返回 Promise 的 IndexedDB 初始化工具函数,接收数据库名、版本号和升级回调,自动处理版本升级、错误捕获与连接复用。在 HTML5 中使用 IndexedDB 时,原生 API 是事件驱动、回调嵌套的,写起来繁琐且难以维护。封装一个 Promise 风格的数据库初始化工具函数,能显著提升可读性与复用性。核心目标:返回 Promise 的 openDB 工具函数该函数应接收数据库名、版本号和可选的升级逻辑,返回一个解析为 IDBDatabase 实例的 Promise。失败时 reject 错误,成功时 resolve 数据库对象,并确保只在必要时执行 upgrade 逻辑。自动处理版本变更(仅当请求版本 > 当前版本时触发 onupgradeneeded) 统一错误捕获(onerror 和 onblocked 可选处理) 避免重复打开(内部缓存已打开的连接,相同 name + version 复用)基础实现(兼容现代浏览器)以下是一个轻量、无依赖的封装示例:function openDB(name, version = 1, upgradeCb = null) { return new Promise((resolve, reject) => { const request = indexedDB.open(name, version); request.onerror = () => reject(request.error); request.onsuccess = () => resolve(request.result); request.onupgradeneeded = (event) => { const db = event.target.result; if (typeof upgradeCb === 'function') { upgradeCb(db, event.oldVersion, event.newVersion, event.transaction); } }; // 可选:处理数据库被其他标签页占用的情况 request.onblocked = () => reject(new Error('Database is blocked --- close other tabs using it')); });}调用方式简洁直观: 知网AI智能写作 知网AI智能写作,写文档、写报告如此简单

相关推荐
IvorySQL4 小时前
PG 日报|新增 VACUUM 全维度统计信息补丁迭代
数据库·人工智能·postgresql·ivorysql
白露与泡影6 小时前
Redis 缓存实战:雪崩、穿透、击穿一次讲透
数据库·redis·缓存
yaoxin5211237 小时前
462. Java 反射 - 获取声明类与封闭类
java·开发语言·python
赵渝强老师7 小时前
【赵渝强老师】使用Oracle可传输的表空间迁移数据
数据库·oracle
中微极客7 小时前
解锁LLM开发全栈能力:Python + LangChain + RAG 工程实战指南
人工智能·python·langchain
hhzz8 小时前
Barbershop:基于GAN和分割Mask的图像合成技术——从理论到实战全解析
图像处理·人工智能·python·深度学习·计算机视觉
IpdataCloud8 小时前
跨区服玩家延迟高怎么办?用IP离线库自动分配到最近服务器
数据库·tcp/ip·github·php·ip
Ulyanov9 小时前
雷达导引头Python仿真框架:GPU加速、6-DOF模型与半实物仿真接口
开发语言·python·雷达信号处理·雷达导引头
wuqingshun3141599 小时前
MYSQL默认的事务隔离级别是什么?为什么选择这个级别?
数据库·mysql
列逍9 小时前
博客系统测试
自动化测试·python·性能测试