Daten werden geladen und in der indexeddb-Datenbank gespeichert. Periodisch habe ich die Datenbank abstürzen und den Zugriff darauf verloren. Geben Sie mir bitte eine Lösung, wie indexeddb asynchron verwenden!Wie mit IndexedDB asynchron arbeiten?
Beispielcode, die ich verwende jetzt:
var dataTotal = 0;
var threads = 6;
//openIndexeddbConnection();
function start(total){
dataTotal = total;
for (var i = 0; i < threads; i++) {
loadData(i);
}
}
function loadData(dataNum){
var dataNext = dataNum + threads;
if(dataNext > dataTotal){
//checkEnd();
return;
}
$.ajax({
url: baseUrl,
data: {offset: dataNum},
success: function (data) {
successData(dataNext, data);
},
type: 'GET'
});
}
function successData(dataNext, data){
var dataArray = data.split(';');
saveData(dataArray);
loadData(dataNext);
}
function saveData(dataArray){
putItem();
function putItem(i) {
var count = i || 0;
if(dataArray.length <= i){
return;
}
var transaction = Indexeddb.transaction([dataTableName], "readwrite");
transaction.onsuccess = function (event) {
//continue
putItem(count);
};
var objectStore = transaction.objectStore(dataTableName);
var request = objectStore.add({data: dataArray[count++]});
}
}
Danke für die Antwort. hatte ich in der Zukunft geplant, saubere Promise oder Rxjs zu verwenden. Mit Promise komfortablere Fangfehler. Aber ich möchte Code ohne Fehler machen. Im Beispiel öffnen Sie jedes Mal eine neue indxedDBbut Verbindung, aber ich benutze nur eine einzige. Ich denke, wir sollten so etwas wie Concurrency Pattern verwenden: Produzent und Verbraucher – Greg