Hallo,
Denkbar wäre höchstens:
var tx = db.transaction();
tx.executeSql(...);Genau das funktioniert aber nicht. Das ist ja mein Problem.
Natürlich nicht. Weil die API nicht synchron aufgebaut ist, sondern mit Callbacks arbeitet. Deshalb schrieb ich »denkbar«, nur um die beiden Modelle gegeneinander abzugrenzen. Wenn du dir z.B. Event-Handling ansiehst, wird auch asynchron gearbeitet:
element.onevent = handlerfunktion;
bzw.
element.addEventListener("event", handlerfunktion, captureFlag)
function handlerfunktion (eventObjekt) {
// ...
}
Alle Vorgänge in JavaScript, die irgendwelche »Seiteneffekte« haben, laufen üblicherweise asynchron mit Event-Handlern bzw. Callbacks:
var i = new Image()
i.onload = loadHandler;
i.src = "/bild.png";
oder
var r = new XMLHttpRequest();
r.open("GET", "datei.txt", true);
r.onreadystatechange = xhrHandler;
r.send(null);
(wobei XMLHttpRequest auch synchron ginge)
oder
window.setTimeout(callbackFunction, 1000);
window.setInterval(callbackFunction, 1000);
Mittlerweile verwenden JavaScript-Helferscripte und -Bibliotheken an tausenden Stellen Callbacks und man notiert ständige anonyme Funktionen, die man gewissen Methoden als Callbacks übergibt. Beispielsweise hat JavaScript 1.7 einige funktionale Erweiterungen:
var array = [1, 2, 3];
array.forEach(function (element) {
alert(element);
});
Mathias