2016-05-05 5 views
0

Ich möchte mehrere Zeilen von Daten in eine IndexedDB hinzufügen. Die Daten werden aus der CSV-Datei geparst, jede Zeile hat eine ID. Nur neue IDs sollten der DB hinzugefügt werden, also verwende ich add. Das funktioniert bisher gut.

Aber wie kann ich herausfinden, welche Linien/Objekte NICHT hinzugefügt wurden? (wegen der doppelten IDs) Wenn ich onerror verwende und das Objekt e auf der Konsole von chrome inspiziere, kann ich das Objekt, das ich an die DB sende, nicht finden. Also ich weiß nur, etwas wurde nicht hinzugefügt, aber nicht was es war. Wie kann man das verfolgen?Wie ADD-Fehler in indexedDB verfolgen?

// .... 

for (var key in csvObject.data) { 
    var request = store.add(csvObject.data[key]); 
} 

request.onerror = function(e) { 
     console.log(e); // e contains not the value of CSVobject.data[key] 
}; 

Antwort

2

Sie sollten dies tun. Schreiben Sie die Funktion in die Schleife und übergeben Sie Ihr Objekt als Argument dafür.

for (var key in csvObject.data) { 
    (function(obj) { 
    var request = store.add(obj); 
    request.onerror = function(e) { 
    console.log(obj, e.target.error, e.target.source); // some error messages 
    }; 
    })(csvObject.data[key]); 
} 
+0

Danke, Jakub. Ich habe immer noch befürchtet, dass es eine solche Lösung braucht. Nicht sehr praktisch. Aber wenn es keinen anderen Weg gibt, sieht es so aus, als müsste ich diesen Weg gehen ... – Lutz

+1

Leider scheint das Ereignis die Daten, die du passierst, nicht zu speichern. Es enthält nur den Fehler. Wenn Sie den Wert innerhalb einer Schleife beibehalten möchten, müssen Sie eine Schließung vornehmen, wie oben beschrieben. Wenn Sie keine Schließung vornehmen möchten, können Sie 'request.onerror = function() {console.log (this); } .bind (csvObject.data [key]); ', aber ich würde bei der Schließung bleiben. –

+0

Ich bevorzuge .bind(). Ist es nur Ihre persönliche Entscheidung, in einem solchen Fall eine Schließung zu verwenden, oder gibt es Probleme mit der .bind() - Methode? – Lutz