我正在使用 idb 执行索引数据库操作。我们正在实施一个缓存系统。我需要动态创建对象存储。如何在不知道版本的情况下在现有数据库中添加对象存储?因为显然只有在版本增加的情况下才能在升级回调中创建对象存储。因此,我们事先并不知道将创建多少个对象存储。
获取数据库的版本而不增加它,它是这样的,我忘记了确切的语法:
function getDatabaseVersion(name) {
return new Promise((resolve, reject) => {
const request = indexedDB.open(name);
request.onsuccess = event => {
const database = event.target.result;
database.close();
resolve(event.version);
};
request.onerror = event => reject(event.target.error);
request.onblocked = event => reject(new BlockedIndefinitelyError());
});
}
class BlockedIndefinitelyError extends Error {
constructor(message = 'Database open was blocked') {
super(message);
}
}
// version is optional, leave as undefined if not upgrading
function open(name, version, upgradeneeded) {
return new Promise((resolve, reject) => {
const request = indexedDB.open(name, version);
request.onupgradeneeded = upgradeneeded;
request.onerror = event => reject(event.target.error);
request.onsuccess = event => resolve(event.target.result);
request.onblocked = event => reject(new BlockedIndefinitelyError());
});
}
async function dothings() {
const name = 'mydb';
const version = await getDatabaseVersion(name);
if(conditionDecidingWhetherToCreateNewTablesIsTrue) {
const database = await open(name, version + 1, event => {
const database = event.target.result;
for (const store of storesToCreate) {
database.createObjectStore(store, store.options);
}
});
database.close();
}
}
Run Code Online (Sandbox Code Playgroud)