Zerknąłem na bibliotekę felixge/node-mysql i nie widziałem odwołania do polecenia client.connect w interfejsie API. Czy to jest faktyczne połączenie, które próbujesz wykonać (nie starając się być tutaj dziwacznym)? Niezależnie od tego, IMHO musisz zastanowić się nad tym, jak zaprojektowana jest Javascript, ponieważ używa paradygmatu programowania innego niż większość popularnych języków.
Pierwszy problem, jaki widzę w twoim kodzie, to że nie zdefiniowałeś wywołania zwrotnego, więc tak naprawdę nie istnieje. Zakładam, że console.log (callback) jest niezdefiniowany. Z Twojego kodu funkcja anonimowa to "oddzwanianie" dla funkcji client.connect. Musisz zdefiniować to, co nazywasz "oddzwanianiem" w wyższym zakresie. Na przykład zdefiniuję funkcję myCallback istniejącą w zakresie wyższym niż anonimowa funkcja client.connect. Przydatne może być wyszukiwanie Javacscript variable scope.
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);
});
Po drugie, jeśli nie wywołasz jawnie zwrotu w JavaScript, funkcja będzie dalej przetwarzać. Zostałem ugryziony przez to myself. W końcu Javascript uruchamia pętlę event-driven, co oznacza, że nigdy nie będzie czekać na zwracanie przez funkcję wartości, dlatego wszystkie te wywołania zwrotne są wykonywane w pierwszej kolejności. Możesz zmusić Javascript, aby zachowywał się inaczej, na przykład używając pętli while, dopóki warunek nie jest prawdziwy. Zobacz bibliotekę "asynchroniczną" według caolan, aby poznać różne strategie manipulowania pętlą zdarzeń. Główną wadą nadużywania tych metod jest faktyczne marnowanie cykli/blokad procesora, kiedy prawdopodobnie powinieneś używać więcej wywołań zwrotnych i po prostu przemyśleć działanie swoich programów.
co masz na myśli, aby zapobiec wyjściu? Nodejs nie wychodzi, dopóki wszystkie połączenia zwrotne nie zostaną zakończone. Jest to proces z jednym wątkiem. – neebz
@nEEbz: Jeśli tak, to dlaczego mój skrypt jest zamykany bez wykonywania wywołania zwrotnego? – mikl
To jest problem z połączeniem z bazą danych; Nie jestem pewien, dlaczego nie uruchamia wywołania zwrotnego. Czy daje jakiś błąd? – neebz