【问题标题】:Connection already made to a IndexedDB Database after call in Dexie在 Dexie 中调用后已与 IndexedDB 数据库建立连接
【发布时间】:2018-08-13 07:59:55
【问题描述】:

当我尝试在 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】:

    当前版本无法将 IDBDatabase 的实例传递给 Dexie 构造函数。但是,这肯定是在源代码中执行的简单拉取请求,因为 Dexie 已经能够按名称打开现有数据库并适应其现有架构。

    但是,如果您将多个 IDBDatabase 实例化为相同的数据库名称,则不应出现错误,除非其中一个尝试使用另一个版本对其进行升级。

    Dexie 可以在不创建架构的情况下打开现有数据库(即使您只能传递名称而不能传递 db 实例),如下面的小提琴所示: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);
    });
    

    (失败是因为给定的数据库不存在。但是如果你在 jsfiddle 上创建它并再次运行它,你会看到它打开)。

    【讨论】:

      猜你喜欢
      • 2021-05-20
      • 2016-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-15
      • 2018-01-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多