Ben bakmak yaptım felixge / düğüm-mysql kütüphane ve API komut client.connect bir başvuru görmedim. Yapmaya çalıştığınız asıl arama bu mu (burada niteleyici olmaya çalışmıyorum)? Ne olursa olsun, IMHO Javascript'in nasıl tasarlandığı hakkında daha fazla düşünmeniz gerekiyor çünkü diğer popüler dillerin çoğundan farklı bir programlama paradigması kullanıyor.
Kodunuzda gördüğüm ilk sorun, geri aramayı tanımlamamış olmanız, dolayısıyla aslında mevcut olmamasıdır. Console.log'un (callback) tanımsız olduğunu varsayıyorum. Kodunuzdan, anonim işlev, client.connect işlevi için 'geri arama'dır. 'Geri arama' dediğiniz şeyi daha yüksek bir kapsamda tanımlamanız gerekir. Örneğin, client.connect'in anonim işlevinden daha yüksek kapsamda var olması için myCallback işlevini tanımlayacağım. Javacscript değişken kapsamına bakmak faydalı olabilir .
var myCallback(err, response) {
if (err) {
console.log('err:%s',err);
} else {
console.log('response:%s',response);
}
}
client.connect(err, function(response) {
if (err) {
myCallback(err);
return;
}
myCallback(null, response);
});
İkinci olarak, Javascript içinde açıkça return çağırmazsanız, işlev işlemeye devam edecektir. Bunun tarafından ısırıldı kendim . Son olarak, Javascript olay odaklı bir döngü çalıştırır, yani işlevlerin bir değer döndürmesini asla beklemeyecektir, bu nedenle ilk etapta tüm bu geri aramalara sahibiz. Örneğin bir koşul doğru olana kadar while döngüsü kullanarak Javascript'i farklı davranmaya zorlayabilirsiniz. Olay döngüsünü değiştirmenin çeşitli stratejileri için caolan tarafından hazırlanan 'eşzamansız' kitaplığa bakın . Bu yöntemleri aşırı kullanmanın en büyük dezavantajı, muhtemelen daha fazla geri çağırma kullanmanız ve programlarınızın nasıl çalıştığını yeniden düşünmeniz gerektiğinde, aslında CPU döngülerini / engellemeyi boşa harcamanızdır.