2017-02-16 5 views
0

Ich sehe, dass der Aufruf von indexedDb offene Anfrage bei Erfolg wird aufgerufen, obwohl die Liste der objectStoreNames leer ist.indexedDb open onsucess ohne onupgradeeneted-Ereignis

Ich glaube, dass das erwartete Verhalten ist, wenn der Handler "onupgradeeneeded" aufgerufen wird, wenn objectStorenames.length null ist.

Weiß jemand, warum das passieren könnte?

jsbin link

var db; 
var DBOpenRequest = window.indexedDB.open("todos", 1); 


DBOpenRequest.onerror = function(event) { 
    console.error('error in open', event); 
}; 

DBOpenRequest.onsuccess = function(event) { 
    db = event.target.result; 
    var objectStores = db.objectStoreNames.length; 
    console.log('success event, number of objectStores: ' + objectStores); 
}; 

DBOpenRequest.onupgradeneeded = function(event) { 
    db = event.target.result; 
    var objectStores = db.objectStoreNames.length; 

    console.log('upgradeneeded event, number of objectStores: ' + objectStores); 

    db.createObjectStore("toDoList", { keyPath: "taskTitle" }); 
}; 
+0

Obwohl die Namensliste der Stores leer ist, ist die Abfrage immer noch gültig, also ein Erfolg, kein Fehler. Sie müssen das Ergebnis der Abfrage im Onsuccess-Callback betrachten. – John

+0

Ich vermute, du hast irgendwie schon eine leere Datenbank in Edge mit der Version "1". Ändern Sie die Version auf "2" und upgrade needed wird wahrscheinlich ausgelöst. Oder löschen Sie Ihre IDB von Edge. – dgrogan

+0

Ich versuche zu verstehen, ob es einen bekannten Pfad gibt, der bewirken kann, dass indexedDb in diesem Zustand ist. Das Problem ist behoben, wenn ich die indexedDb-Datenbank aus dem Browser lösche. – sbr

Antwort

0

Das Problem war, dass es einen anderen Codeabschnitt gab, der indexedDB.open aufruft, aber upgradeneeded nicht zuhörte.

1

Dies scheint das erwartete Verhalten von IndexedDB zu sein. Sie suchen db.objectStoreNames.length innerhalb von onupgradeneeded, bevor der Objektspeicher erstellt wurde. Sie müssen es stattdessen im Callback onsuccess überprüfen.

Ich bemerke auch, dass das Verhalten in Ihrem jsbin ist die gleiche über Chrome, Firefox, Edge und IE.