node.js und promise-mysql: wie schließe ich korrekt die Verbindungen?
Klaus1
- javascript
- node.js
- programmiertechnik
Hallo,
so sieht derzeit ein einfacher Select auf eine Tabelle aus:
strQuery = 'select * from mytable';
mysql.createConnection(mysqlConnData)
.then(function(conn){
connection = conn;
var result = connection.query(strQuery);
return result;
}).then(function(rows){
connection.end(function(err) { });
return;
}).catch(function(error){
if (connection && connection.end) connection.end();
//logs out the error
console.log("Fehler bei: "+strQuery);
console.log(error);
});
Nach Abschluss des Selects möchte ich die Verbindung schließen. Aber entweder ich erhalte solche Meldungen:
Unhandled rejection Error: Cannot enqueue Quit after invoking quit.
Oder:
Unhandled rejection Error: Quit inactivity timeout
Wenn ich das connection.end() weglasse, erhalte ich nach einer Weile die Meldung, dass keine weitere Verbindung geöffnet wwerden kann (max connections reached).
Wenn die Verbindung schon vorher geschlossen wurde, ist es doch eigentlich egal, wenn ich sie "nochmal" schließen möchte. Also Fehler einfach unterdrücken?
Ich verstehe halt nicht, wieso die Verbindung überhaupt schon geschlossen sein könnte oder wie es hierbei zu einem Timeout kommen kann, wenn ich doch die Verbindung direkt wieder schließe. Das Query dauert nur ein Bruchteil einer Sekunde.
LG Klaus
Hallo Klaus1,
wenn ich deinen Code mit dem Muster auf der npm Seite vergleiche, dann
De facto habe ich aber keine Ahnung, ich bin nur gut in pattern matching 😁
Rolf
Tach!
- sehe ich keine Deklaration von connection
Das macht nichts weiter, denn dann wird connection implizit beim ersten Schreibzugriff als globale Variable angelegt, so wie es im Beispiel explizit der Fall ist. (Genauer gesagt, wird connection als Eigenschaft von window angelegt.)
dedlfix.
Hallo dedlfix,
ok, wenn Node das auch so macht… Irgendwas war da anders, meine ich zu wissen.
Rolf
Tach!
ok, wenn Node das auch so macht… Irgendwas war da anders, meine ich zu wissen.
Achja, Node.js, da ist das dann nicht window. Aber einen globalen Scope gibts da auch, der ebenfalls durch das Weglassen von var
angesprochen wird, wenn man sich in einem lokalen Scope befindet.
dedlfix.