2012-03-26 5 views
2

Ich versuche, so etwas wieDOM IDBDatabase 3 Ausnahme, wenn IndexedDB mit

var store = trans.objectStore("todo"); 

, die die folgenden erropr

Uncaught Error: NOT_FOUND_ERR: DOM IDBDatabase Exception 3 

in der Konsole gibt Obwohl ich diesen Fehler erwarten (der Objektspeicher nicht existieren), aber ich möchte es fangen. Ich habe versucht, der Transaktion einen Onerror hinzuzufügen

trans.onerror = function(e) { ... } 

aber der Onerror wird nicht aufgerufen. Gibt es eine Möglichkeit, diesen Fehler mit Hilfe von onerror zu fangen? Oder ist der einzige Weg, um es mit Versuch/Fang zu wickeln?

Antwort

3

Warum möchten Sie diese Ausnahme fangen? Bevor Sie den Store aufrufen, können Sie in der Datenbank nachsehen, ob ein Objekt mit diesem Namen existiert.

Wenn Sie mit Ausnahmen arbeiten möchten, ist es für die Leistung schlecht.

+0

thnx für den Vorschlag! –

2

Die Handler onerror sind für asynchrone Aufrufe. objectStore ist einer der wenigen synchronen Aufrufe in der API, also müssen Sie einen traditionellen try..catch(e) verwenden.

var store; 
try { 
    store = trans.objectStore("todo"); 
} catch(err) { 
    console.log("CAUGHT", err); 
} 
+0

hast du wirklich meinen Tag gemacht, thnx! –

+0

Wo genau wird das beschrieben? Und ich habe das Gefühl, dass objectStore.add auch synchron ist! was wahrscheinlich der Grund ist, dass trans.oncomplete nicht feuert! –

+0

Sieht so aus. Schauen Sie sich die hier aufgelisteten Ausnahmen an: http://www.w3.org/TR/IndexedDB/#widl-IDBObjectStore-add-IDBRequest-any-value-any-key >> Ich sollte eine Liste aller Synchronisationsmethoden in erstellen die API. Es ist verwirrend. Ein anderes ist createObjectStore(). – buley