在Dexie中调用之后已经连接到IndexedDB数据库

问题描述 投票:0回答:1

当我尝试在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);
 });

我想使用与第一个相同的连接。可能吗?

javascript indexeddb dexie
1个回答
1
投票

从当前版本开始,将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上创建并再次运行它,你会看到它打开)。

© www.soinside.com 2019 - 2024. All rights reserved.