Ich habe mir felixge / node-mysql angesehen Bibliothek angesehen und keinen Verweis auf den Befehl client.connect in der API gefunden. Ist dies der eigentliche Anruf, den Sie tätigen möchten (ohne hier pingelig zu sein)? Unabhängig davon müssen Sie meiner Meinung nach mehr darüber nachdenken, wie Javascript aufgebaut ist, da es ein anderes Programmierparadigma verwendet als die meisten anderen gängigen Sprachen.
Das erste Problem, das ich in Ihrem Code sehe, ist, dass Sie den Rückruf nicht definiert haben, sodass er tatsächlich nicht vorhanden ist. Ich würde annehmen, dass console.log (Rückruf) undefiniert ist. Nach Ihrem Code ist die anonyme Funktion der Rückruf für die Funktion client.connect. Sie müssen definieren, was Sie "Rückruf" in einem höheren Bereich nennen. Zum Beispiel werde ich eine Funktion myCallback so definieren, dass sie in einem höheren Bereich als der anonymen Funktion von client.connect vorhanden ist. Es kann nützlich sein, den Bereich der Javacscript- Variablen nachzuschlagen .
var myCallback(err, response) {
if (err) {
console.log('err:%s',err);
} else {
console.log('response:%s',response);
}
}
client.connect(err, function(response) {
// this anonymous function is the callback to client.connect, the var
// 'callback' would be undefined.
if (err) {
myCallback(err);
return; // Explicit call to return, else the lines below would run.
}
myCallback(null, response);
});
Zweitens wird die Funktion weiter verarbeitet, wenn Sie return nicht explizit in Javascript aufrufen. Ich war von diesem gebissen mir . Schließlich führt Javascript eine ereignisgesteuerte Schleife aus, was bedeutet, dass es niemals darauf warten wird, dass Funktionen einen Wert zurückgeben, weshalb wir überhaupt alle diese Rückrufe haben. Sie können Javascript zwingen, sich anders zu verhalten, indem Sie beispielsweise eine while-Schleife verwenden, bis eine Bedingung erfüllt ist. In der 'async'-Bibliothek von caolan finden Sie verschiedene Strategien zur Manipulation der Ereignisschleife. Der Hauptnachteil einer übermäßigen Verwendung dieser Methoden besteht darin, dass Sie tatsächlich CPU-Zyklen / Blockierungen verschwenden, wenn Sie wahrscheinlich mehr Rückrufe verwenden und einfach überdenken sollten, wie Ihre Programme funktionieren.