当我尝试在IndexedDB已经完成另一个调用的数据库上调用Dexie时,会出现连接已经对数据库进行连接的错误。
我们可以将现有的Indexedb连接传递给Dexie吗?当我们想在Dexie对象和另一个对象中使用相同的连接时,这会很有用,当我尝试将Dexie添加到我的项目时,这种情况就会发生。我不想重写现有的功能。
例:
function initDataBase(callback){
if(window.indexedDB){
var requeteBDD = window.indexedDB.open("databasename",1);
requeteBDD.onsuccess = function(){
if(typeof callback == "function")
callback(requeteBDD.result);
};
}
}
例如,我们可以这样做
initDataBase(function(db){
var dex = new Dexie(db);
});
我想使用与第一个相同的连接。可能吗?
从当前版本开始,将IDBDatabase的实例传递给Dexie构造函数是不可能的。但是,这肯定是在源代码中执行的简单拉取请求,因为Dexie已经能够按名称打开现有数据库并适应其现有架构。
但是,如果将多个IDBDatabases实例化为相同的数据库名称,则不应该出现错误,除非其中一个尝试使用其他版本升级它。
Dexie可以在不创建模式的情况下打开现有数据库(即使您只能传递名称而不是数据库实例),如下面的小提琴所示:https://jsfiddle.net/dfahlander/b8Levamm/
new Dexie('MyDatabase').open().then(function (db) {
log ("Found database: " + db.name);
log ("Database version: " + db.verno);
db.tables.forEach(function (table) {
log ("Found table: " + table.name);
log ("Table Schema: " +
JSON.stringify(table.schema, null, 4));
});
}).catch('NoSuchDatabaseError', function(e) {
// Database with that name did not exist
log ("Database not found");
}).catch(function (e) {
log ("Oh uh: " + e);
});
(因为给定的DB不存在而失败。但是如果你在jsfiddle上创建并再次运行它,你会看到它打开)。