Ich versuche, eine API zu schreiben, um meine indexedDB-Funktionalität zu behandeln. Ich habe Probleme, das DB-Objekt in einer Klasse zu speichern, weil ich auf die .onsuccess
Ereignisse von der Anforderung .open() warten muss, um zu schießen.ruft window.indexedDB.open() mit jeder Transaktion verschwenderisch
Also schrieb ich eine Methode, die db initialisieren:
async initializeDB() {
return new Promise((resolve, reject) => {
const {
dbVersion,
databaseName,
fieldsObjectStoreName,
filedObjectStoreKeyName
} = IndexDbParams;
// Open a connection to indexDB
const DbOpenRequest = window.indexedDB.open(databaseName, dbVersion);
DbOpenRequest.onsuccess = e => {
const db = DbOpenRequest.result;
// Create data stores if none exist
if (db.objectStoreNames.length < 1) {
if (db.objectStoreNames.indexOf(fieldsObjectStoreName) < 0) {
db.createObjectStore(fieldsObjectStoreName, {
keyPath: filedObjectStoreKeyName
});
}
}
// return db object, will come hore from onupgradeneeded as well
resolve(db);
};
// If we need to upgrade db version
DbOpenRequest.onupgradeneeded = e => {
const db = event.target.result;
const objectStore = db.createObjectStore(fieldsObjectStoreName, {
keyPath: filedObjectStoreKeyName
});
};
});
}
Welche dann würde ich am Anfang alle meine anderen Methoden aufrufen, zum Beispiel:
async getData() {
this.initializeDB().then(db => {
// do stuff with the db object
})
}
Meine Frage ist - ist Dies verschwenden viel mehr Ressourcen als .open()
einmal aufrufen und dann im globalen Zustand speichern? Was (wenn überhaupt) könnten die möglichen Konsequenzen dieses Ansatzes sein?
Haben Sie einen Vergleich zwischen einem db objet im Speicher gegenüber der Latenz Speicher einen neuen .open() Antrag Ursachen öffnen? –
Nichts bereit zu zeigen. Aber ich nehme an, es wäre nicht schwer, selbst etwas zu erschaffen. – Josh