Я просмотрел библиотеку felixge / node-mysql и не увидел ссылку на команду client.connect в API.Это фактический звонок, который вы пытаетесь сделать (не пытаясь быть придирчивым)?Несмотря на это, IMHO, вам нужно больше думать о том, как спроектирован Javascript, потому что он использует парадигму программирования, отличную от большинства других популярных языков.
Первая проблема, которую я вижу в вашем коде, заключается в том, что вы не определили обратный вызов, поэтому он на самом деле не существует.Я бы предположил, что console.log (callback) не определен.Из вашего кода анонимная функция является «обратным вызовом» для функции client.connect.Вы должны определить, что вы называете «обратным вызовом» в более широком контексте.Например, я определю функцию myCallback, которая будет существовать в области выше, чем анонимная функция client.connect.Это может быть полезно для поиска Javacscript переменная область действия .
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);
});
Во-вторых, если вы явно не вызываете return в Javascript, функция продолжит обработку.Я был укушен этим собой .Наконец, Javascript запускает управляемый событиями цикл , означающий, что он никогда не будет ждать, пока функции вернут значение, поэтому у нас есть все эти обратные вызовы в первую очередь.Вы можете заставить Javascript вести себя по-другому, например, используя цикл while, пока условие не станет истинным.Смотрите библиотеку 'async' caolan , для различных стратегий манипулирования циклом событий.Основным недостатком чрезмерного использования этих методов является то, что вы фактически тратите циклы / блокировки ЦП, когда вам, вероятно, следует использовать больше обратных вызовов и просто переосмыслить работу своих программ.