2016-09-11 1 views
0

Ich arbeite mit IndexedDB und wenn ich versuche, mehrere Werte zu ändern/bearbeiten gleichen Text und mit einer "FOR" Schleife zeigt es mir: "Fehler beim Lesen der 'Ergebnis' Eigenschaft von 'IDBRequest': Die Anfrage wurde nicht beendet".Fehler: "Fehler beim Lesen der Eigenschaft 'result' von 'IDBRequest': Die Anfrage wurde nicht beendet" wenn ich versuche, in einer Schleife zu ändern

Wenn ich es mit nur einem Wert ohne Schleifen versuche, funktioniert alles gut. Das ist meine eigentliche Funktion:

function modificarModelos(){ 
     var active = dataBase.result; 
     var data = active.transaction(["modelos"], "readwrite"); 
     var object = data.objectStore("modelos"); 
     var request; 
     for(var key in window.idModelosMarca){ 
     request = object.get(window.idModelosMarca[key]); 
     request.onsuccess = function() { 
      var data = request.result; //---> THE ERROR APPEARS IN THIS LINE 
      data.idmarca = document.querySelector("#NuevoNombreMarca").value 
      var requestActualizado = object.put(data); 
      requestActualizado.onsuccess = function() { 
      console.log("Success"); 
      }; 
      requestActualizado.onerror = function (e) { 
      alert(request.error.name + '\n\n' + request.error.message); 
      }; 
     }; 
     } 
    } 

Was kann ich tun, damit es funktioniert?

Danke.

Antwort

0

Ich löste es diese Funktion durch einen anderen Aufruf, der die Schleife im Inneren haben:

function aux(){ 
    .... 
    for(i=0;i<someCounter;i++){ 
     modificarModelos(somevalue);  
    }  
} 
+1

Yep, die funktioniert. Das Problem im ursprünglichen Code ist, dass 'request' eine einzelne Variable ist, auf die alle Instanzen der Callback-Funktion zeigen. Wenn also das erste Erfolgsereignis ausgelöst wird, referenziert "request" die letzte Anfrage. Eine andere Lösung besteht darin, eine Bezugnahme auf eine "Anfrage" in dem Rückruf zu vermeiden, z. 'onsuccess = Funktion (e) {var data = e.target.result; ...} ' –

+0

Ich habe diesen Fehler einige Male bei der Verwendung von indexedDB mit funktionalen Programmen gesehen. Joshuas Antwort ist die genaueste, die ich gesehen habe. – Duco

0

Es sieht so aus, als ob Sie neu in der asynchronen Programmierung sind. Der einfachste, kürzeste und einfachste Weg, um dies zu lösen, ist Vermeiden Sie die Definition von Funktionen innerhalb von Schleifen.

Verwandte Themen