Ich lerne Node.js und ich fange gerade an, mit einigen MySQL Verbindungen zu arbeiten. Ich habe eine Funktion, die eine Reihe von Zeilen aus der Datenbank bekommen soll, was sie richtig macht. Ich weiß jedoch nicht, wie ich diese Reihe von Zeilen später zurückgeben soll. Ich habe versucht, zwei Optionen (beide unten in den Kommentaren im Code-Segment erläutert.Wie man den Wert von der Node.js Funktion zurückgibt, die die DB Abfrage enthält
function fetchGameList(){
var ret = 0;
connection.query("SELECT * from tbl", function(err, rows, fields) {
//some stuff happens here, and 'ret' is set to a vlue, for instance
//ret = 7;
//ret has the value 7 here, but if I put 'return ret' here, nothing is returned
});
return ret; //returns 0 because Node is asynchronous and the query hasn't finished yet
}
Also, die Frage ist, wie kann ich den richtigen Wert von ret
(7 in diesem Fall zurück)? Bin ich auch diese Strukturierung richtig ?
Sie werden schnell erkennen, dass dies nicht mehr handhabbar werden kann. Ich empfehle die [async] (https://npmjs.org/package/async) Bibliothek für die Behandlung langer Ketten von asynchronen Funktionen. – qubyte
Ich bin besorgt, dass, wenn ich 5 Funktionen wie diese habe, ich jeden so nennen und so 5 "Schichten" von Funktionen sozusagen machen muss. Wie Sie gesagt haben, kann dies leicht unüberschaubar werden. Ich meine, ich kann es schreiben, aber viel Glück für jeden, der es später ändern will. Die "Async" -Bibliothek sieht genau so aus, wie ich sie brauche, auf den ersten Blick sieht es so aus, als würde ich in diesen Fällen die Flusssteuerung ".series" verwenden wollen. – jovan
Sie sind genau richtig. 'async.series' ist die nützlichste Methode der Bibliothek. Versuchen Sie, "asyncwasserfall" zu vermeiden. Es sieht zunächst gut aus, macht aber später Modifikationen schwieriger. Versuchen Sie auch, Ihre Funktionen zu benennen, anstatt inline anonyme Funktionen zu schreiben. Dies verbessert die Lesbarkeit und stapelt Spuren, wenn etwas schief geht. – qubyte