Tach!
Einzelne oder gruppierbare Abfragen kann ich in einen Funktionsaufruf kapseln, aber wie mache ich das bei abhängigen Abfragen, die ich mit dem then-Händler serialisieren muss?
Ob Code unmittelbar dasteht oder in einer Funktion steckt und nur an der Stelle aufgerufen wird, bleibt sich gleich. Lediglich die Scopes für verwendete Variablen müssen beachtet werden.
Wobei auch bei ersterem für mich noch die Frage besteht, ob ich nur den SQL-Aufruf in die Funktion legen kann, aber die weitere Verarbeitung mit dem Ergebnis nicht.
Wenn die Weiterverarbeitung abhängig vom Ergebnis ist, muss das zeitlich aufeinanderfolgen. Du kannst das zwar örtlich trennen, aber wie stellst du dann sicher, dass das eine fertig ist, bevor das andere weiterläuft?
Vielleicht so?:
strQuery = "select umsatz from umsaetze where kdnr = 123456"; result = performqueries(strQuery); umsatz = result[0].umsatz; function performqueries(strQuery) { pool.getConnection(function(err, connection) { connection.query(strQuery, function(err, rows) { if (err) { console.log("Fehler bei: "+strQuery); console.log(err); } else { return rows; } }); connection.release(); }); }
Nein. performqueries() gibt kein Ergebnis zurück. Das was im Callback passiert, wird an den aufrufenden Kontext zurückgegeben, nicht aber an den Kontext, in dem der Callback definiert wurde. performqueries() kann maximal ein Promise zurückgeben, das irgendwann später erfüllt wird. Auf dieses Promise kannst du mit angehängtem then() reagieren. Aber nicht mit unmittelbar folgendem Code. Du kannst nicht jemanden Brötchen holen schicken und direkt nach der Aufforderung mit dem Frühstück beginnen, wenn du dafür die Brötchen brauchst. Du kannst nur davon unabhängige Dinge erledigen. Zum Beispiel schon mal Tee kochen. In dem Fall musst du aber beachten, dass beides fertig ist, bevor du fortfährst, Tee ist fertig und die Brötchen sind eingetroffen. Der Tee ist in dem Beispiel nicht wirklich unabhängig. Das kann zwar unabhängig gestartet werden, aber die Ergebnisse müssen miteinander synchronisiert werden. Blumen gießen wäre hingegen komplett unabhängig.
dedlfix.