Überprüfen Sie, ob IndexedDB objectStore enthält bereits die wichtigsten
Hinzufügen eines Objekts zu einer IndexedDB objectStore wird scheitern, wenn der Schlüssel bereits vorhanden ist. Wie kann ich prüfen, ob die Existenz eines Objekts mit einer bestimmten Schlüssel – vorzugsweise synchron (kein Grund für eine andere Ebene der Rückrufe) und ohne ziehen Sie das Objekt.
Ich weiß, wie zu tun bekommen die Anfragen asynchron über Geschäfte, aber es scheint ein bisschen eine Tortur, durch zu gehen, jedes mal, wenn ich will, um ein Objekt hinzuzufügen.
Hinweis Lösung, nur hat die Arbeit in Chrom (wenn das hilft)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Bisher keiner von den Browsern haben die sync-API implementiert, so dass Sie gehen zu müssen, es zu tun async. Ein
objectStore
stellt eineget
Methode, die Sie es mit einem Schlüssel, und es werde Sie das Objekt (oder null), das mit dem Schlüssel.Es ist ein wirklich gutes tutorial auf MDN, der behandelt die Verwendung von IDB und Datensatz abrufen ist abgedeckt, aber der inline-code ist:
Wenn Sie nicht möchten, Datensatz abrufen, dann können Sie immer die
count
Methode, die auf einem index wie erklärt hier in der spec. Basierend auf dem Ergebnis, dass Sie entweder verwendenadd
oderput
zu ändern, die Aufzeichnung, Sie sparen extrahieren Sie den Datensatz, wenn Sie nicht müssen.Der beste Weg, um zu überprüfen, die Existenz des Schlüssels ist objectStore.count(key). Was ist async.
In Ihrem Fall, die beste option ist openCursor Ihrer Schlüssel. Wenn vorhanden ist, der cursor wird kommen.
Ein bisschen spät für eine Antwort, aber möglich ist es anderen hilft. Ich noch gestolpert -wie ich denke - über das gleiche problem, aber es ist sehr einfach:
Wenn Sie möchten, EINFÜGEN oder AKTUALISIEREN von Datensätzen, die Sie verwenden
objectStore.put(object)
(Hilfe)Wenn Sie nur wollen, zum EINFÜGEN von Datensätzen, die Sie verwenden
objectStore.add(object)
(Hilfe)Also, wenn Sie
add(object)
- und eine record-Taste noch vorhanden ist in der DB, wird es nicht überschrieben und feuert Fehler 0 "ConstraintError: der Schlüssel ist bereits vorhanden im Objekt speichern".Wenn Sie
put(object)
überschrieben werden.Die Frage ist, warum wollen Sie das wissen? Vielleicht sollten Sie einen weiteren Ansatz verwenden?
Sie können auto-increment, auf diese Weise brauchen Sie nicht zu überprüfen, ob ein Schlüssel vorhanden ist, erhalten Sie immer ein einzigartiges.
Können Sie auch die put-Methode anstelle der add-Methode. Mit dem setzen werden die Daten aktualisiert, wenn der Schlüssel vorhanden ist und wenn der Schlüssel nicht vorhanden sind, werden die Daten Hinzugefügt werden.
Alles hängt von der Grund, warum Sie wollen, um zu überprüfen, ob etwas existiert.