2017-12-21 4 views
0

Mit dem IndexedDB API haben wir diese zwei Methoden: getAll() und getAllKeys() mit einem Anwendungsbeispiel von unten:IndexedDB immer alle Daten mit Schlüsseln

let transaction = this.db.transaction(["table"]); 
let object_store = transaction.objectStore("table"); 
request = object_store.getAll(); /* or getAllKeys() */ 

request.onerror = (event) => { 
    console.err("error fetching data"); 
}; 
request.onsuccess = (event) => { 
    console.log(request.result); 
}; 

Das Problem ist getAll() scheint nur die Daten in einem Array-Format abzurufen, und getAllKeys() bekommt alle Schlüssel ohne die Daten. Ich konnte keine Methode finden, um sowohl Schlüssel als auch Werte zu erhalten.

  1. Gibt es einen besseren Weg, um die Daten zu bekommen und die Schlüssel mit einem Anruf, wie sie gespeichert werden?

  2. Wenn nicht, gibt es eine bessere Möglichkeit, dies zu tun, ohne den Code mit mehreren asynchronen Aufrufen zu verwirrend zu machen?

+0

Ähm, nicht wirklich sicher, was dieser Frage zu machen. Ziemlich unklar, und es selbst zu beantworten, ist nicht klar. Oder warum es aufgewertet wurde. Aber Sie können getAll verwenden und nur auf die Eigenschaften jedes Objekts zugreifen ... – Josh

+0

@Josh Ich habe mich selbst geantwortet, nachdem ich eine Lösung für mein Problem gefunden hatte. Um es klarzustellen: Sicher, dass Sie mit getAll() auf die Eigenschaften aller Objekte zugreifen können, aber nicht den Schlüssel des Objekts, der in der IndexedDB-Tabelle gespeichert ist. Der Tabellenspeicher enthält den Inhalt als eine Liste von 'Schlüssel: Objekt'-Paaren. getAll() gibt mir nur die Objekte, getAllKeys() gibt mir nur die Schlüssel. Ich wollte eine Methode, um Schlüssel und Objekt (oder Daten) ohne mehrere asynchrone Aufrufe abrufen. – TheMechanic

+0

Verwenden Sie Inline-Schlüssel und getAll – Josh

Antwort

2

konnte ich alle Werte mit ihren Tasten mit einer Callback-Funktion ein IDBCursor wie folgt abzurufen:

transaction = this.db.transaction(["table"]); 
object_store = transaction.objectStore("table"); 
request = object_store.openCursor(); 

request.onerror = function(event) { 
    console.err("error fetching data"); 
}; 
request.onsuccess = function(event) { 
    let cursor = event.target.result; 
    if (cursor) { 
     let key = cursor.primaryKey; 
     let value = cursor.value; 
     console.log(key, value); 
     cursor.continue(); 
    } 
    else { 
     // no more results 
    } 
}; 
Verwandte Themen