Javascript WebSQL-Abfrage innerhalb von for-Schleife. Wie kann ich wissen, wann ich fertig bin?

8

Ich denke, ich habe eine relativ einfache Frage, aber ich denke immer wieder im Kreis und selbst Google gibt mir keine Antwort, mit der ich arbeiten kann.

Grundsätzlich versuche ich einige Datensätze zu kopieren, die lokal mit WebSQL gespeichert werden. Kopieren ist nicht das Problem, aber ich muss wissen, wann alle Kopiervorgänge beendet sind, bevor mein Programm fortfahren kann.

WebSQL-Aufrufe werden asynchron durchgeführt. Daher kann ich diese Dinge normalerweise nur mit der Callback-Funktion tun. Da die Abfragen jedoch innerhalb einer for-Schleife ausgeführt werden, kann die Rückruffunktion nicht verwendet werden, da sie bei der ersten abgeschlossenen Abfrage wie im Code gezeigt ausgelöst wird.

Der Code lautet wie folgt:

%Vor%

Ich habe auch versucht, die Callback-Funktion aufzurufen, wenn i == results.rows.length , aber das stellt mich nicht sicher, dass alle Abfragen abgeschlossen sind.

Ich schätze, einige von Ihnen haben das gleiche Problem bereits zuvor festgestellt, daher wird jede Hilfe, wie das gelöst werden kann, und sicherstellen, dass die Callback-Funktion nur aufgerufen wird, wenn die for-Schleife abgeschlossen ist, sehr geschätzt.

Vielen Dank im Voraus.

    
user1749815 16.10.2012, 11:26
quelle

2 Antworten

8

Der übliche Ansatz hierfür wäre die Verwendung eines rekursiven asynchronen Callbacks zur Verarbeitung jedes einzelnen Datensatzes anstelle einer for -Schleife.

Während mehr Datensätze übrig sind, ruft der asynchrone Rückruf sich selbst auf. Wenn keine Datensätze mehr vorhanden sind, kann es Ihren bereitgestellten Rückruf aufrufen.

Der folgende Code würde den Inhalt Ihres inneren Callback-Handlers ersetzen:

%Vor%     
Alnitak 17.10.2012, 15:38
quelle
2

Dies wird am besten erreicht, indem die Anzahl der ausgeführten "Callback" -Funktionen gezählt wird und erst dann fortgefahren wird, wenn der volle Wert der Ergebnismenge erreicht ist.

Hier ist Ihr Code mit den Änderungen:

%Vor%

Ich fand, dass die asynchronen APIs von WebSQL ein wenig komerziös sind, und da die WebSQL-Datenbanken wahrscheinlich verschwinden werden (der Standard wurde gestrichen), würde ich jedem empfehlen, zu SequelSphere . Es ist eine relationale HTML5 / JavaScript-Datenbank, die über alle Browser und alle Plattformen hinweg funktioniert. Es speichert auch Daten in localStorage und bietet alle Vorteile von WebSQL, ohne all die Probleme.

Lassen Sie mich wissen, ob die obige Lösung für Sie nicht funktioniert.

Viel Glück!

John ...

    
John Fowler 17.10.2012 15:27
quelle

Tags und Links