Hallo Klaus1,
in MySQL gibt es das Feature, dem INSERT Befehl die Klausel ON DUPLICATE KEY UPDATE hinzuzufügen. Vielleicht umgeht das das Problem, dass du eine serialisierte Ausführung brauchst. Guck's Dir mal im Handbuch an.
Das konkrete Problem in deinem Snippet habe ich noch nicht verstanden. Welche Ausgabe GENAU passiert und welche nicht?
Eins kann auf jeden Fall ein Problem werden: du baust das SQL Statement vor getConnection auf und speicherst es in einer mutmaßlich globalen Variablen. Wenn Du die nach dem getConnection-Aufruf noch anderweit benutzt, findet der Callback nicht mehr das vor, was du erwartest.
Mir fällt auch auf, dass du den err Pfad von getConnection nicht ausgibst.
Also ja, kapseln. Setze den Aufbau des SQL und den getConnection Aufruf in eine function und deklariere darin alle Variablen (mit var oder let), die von den Callbacks gebraucht werden. Die Daten, die als Grundlage für die Query dienen, übergibst du als Parameter. Den Pool kannst du global lassen, den wird es wohl nur einmal geben. Statt direkter Callbacks kannst du natürlich auch die Promises von promise-mysql nutzen.
Auf diese Weise erhältst Du eine Closure mit den relevanten Daten für diesen SQL Zugriff.
Mit den Promises hast du die weitere Möglichkeit, das vom letzten .then zurückgegebene Promise zurückzugeben und so die Kette nach der Rückkehr aus deiner function noch zu verlängern.
Rolf
sumpsi - posui - clusi