数据库存在时不调用 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 调用了。
有一个通用示例代码(下面列出的修改版本)显示了如何在打开 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 调用了。