使用Dexie触发IndexedDB连接已存在错误,能否传入现有连接?
解决Dexie复用现有IndexedDB连接的问题
好问题!其实Dexie完全支持复用你已经建立好的IndexedDB连接,不用重写现有代码就能实现这个需求,具体可以通过两种方式来操作:
1. 创建Dexie实例时直接传入现有连接
如果你已经拿到了一个处于已打开状态的IDBDatabase对象,可以在初始化Dexie的时候,通过构造函数的第二个配置参数传入它,这样Dexie就会直接复用这个连接,不会再尝试新建连接触发错误:
// 假设existingDb是你已经打开的IndexedDB连接实例 const db = new Dexie('你的数据库名称', { existing: existingDb });
2. 给已创建的Dexie实例关联现有连接
如果已经提前创建了Dexie实例,也可以使用attach()方法将它绑定到已有的IDBDatabase连接上:
const db = new Dexie('你的数据库名称'); // 关联已打开的existingDb连接 db.attach(existingDb);
一些需要注意的点
- 确保传入的
existingDb是已成功打开的状态,不能是关闭中或者正在打开的连接,否则会触发异常。 - 复用连接时,Dexie会沿用原有连接的数据库版本和结构,如果原有连接的版本和Dexie定义的schema存在差异,需要先处理版本兼容问题,避免操作冲突。
- 绑定成功后,Dexie的所有数据库操作都会在这个共享连接上执行,完美实现和现有代码复用同一连接的需求。
内容的提问来源于stack exchange,提问作者Mathe Eliel
相关产品推荐
相关产品推荐

