Уже выполнено подключение к базе данных IndexedDB после вызова в Dexie

Когда я пытаюсь вызвать Dexie в базе данных, для которой IndexedDB выполнил другой вызов, возникает ошибка, что соединение с базой данных уже установлено.

Можем ли мы передать существующее соединение с 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);
 });

Я хотел бы использовать то же соединение, что и первое. Является ли это возможным?


person Mathe Eliel    schedule 05.03.2018    source источник


Ответы (1)


В текущей версии невозможно передать экземпляр IDBDatabase в конструктор Dexie. Тем не менее, это определенно будет простой запрос на вытягивание в исходном коде, поскольку Dexie уже имеет возможность открывать существующую базу данных по имени и адаптировать ее к существующей схеме.

Тем не менее, вы не должны получить сообщение об ошибке, если вы создадите несколько баз данных IDBDatabase с одним и тем же именем базы данных, если только одна из них не попытается обновить ее, используя другую версию.

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);
});

(что не удается, потому что данной БД нет. Но если вы создадите ее на jsfiddle и снова запустите, вы увидите, что она открыта).

person David Fahlander    schedule 06.03.2018