数据库存在时不调用 idb 函数 (upgradeDb)

idb function(upgradeDb) not called when database exists

有一个通用示例代码(下面列出的修改版本)显示了如何在打开 idb 数据库时创建对象存储。 idb.open 回调函数检查每个对象存储是否存在并创建它以防它丢失。

我注意到只有当数据库不存在时才会调用此函数,那么如果仅在这些对象存储肯定不存在时才调用该函数,那么检查每个对象存储是否存在的原因是什么?

class indexeddb {

    static OpenIDB() {

        return idb.open('dbName', 1, function(upgradeDb) {      

            if (!upgradeDb.objectStoreNames.contains('objectStore1')) {
                const store1 = upgradeDb.createObjectStore('objectStore1', {keyPath: 'someKey'});
            }
            if (!upgradeDb.objectStoreNames.contains('objectStore2')) {
                const store2 = upgradeDb.createObjectStore('objectStore2', {keyPath: 'someKey'});
            }
            if (!upgradeDb.objectStoreNames.contains('objectStore3')) {
                const store3 = upgradeDb.createObjectStore('objectStore3', {keyPath: 'someKey'});
            }

        });

    };   //class continues...

为什么我需要这个?我需要在我的 Web 应用程序中向现有数据库添加一个新的对象存储,但这似乎不可能。

增加数据库版本解决了这个问题。在 Whosebug 上发布您的问题的过程具有启发性的力量。我把它留在这里以防其他人被困在他自己的盒子里。

看来版本号必须是整数。在我的例子中,将它从 1 更改为 1.1 并没有调用升级,但是 1 到 2 调用了。