मैंने felixge / node-mysql लाइब्रेरी को देखा और कमांड क्लाइंट का संदर्भ नहीं देखा। API में कनेक्ट करें। क्या यह वास्तविक कॉल है जिसे आप बनाने की कोशिश कर रहे हैं (यहां नाइटपिक होने की कोशिश नहीं कर रहे हैं)? भले ही, IMHO आपको इस बारे में अधिक सोचने की ज़रूरत है कि जावास्क्रिप्ट कैसे डिज़ाइन किया गया है, क्योंकि यह अन्य अन्य लोकप्रिय भाषाओं की तुलना में अलग प्रोग्रामिंग प्रतिमान का उपयोग करता है।
आपके कोड में पहला मुद्दा यह है कि आपने कॉलबैक को परिभाषित नहीं किया है, इसलिए यह वास्तव में मौजूद नहीं है। मुझे लगता है कि कंसोल.लॉग (कॉलबैक) अपरिभाषित है। आपके कोड से, अनाम फ़ंक्शन क्लाइंट.कनेक्ट फ़ंक्शन के लिए 'कॉलबैक' है। आपको यह परिभाषित करना होगा कि आप किस 'कॉलबैक' को उच्च दायरे में बुला रहे हैं। उदाहरण के लिए, मैं एक फ़ंक्शन myCallback को क्लाइंट से अधिक के दायरे में मौजूद होने के लिए परिभाषित करूंगा। अनाम फ़ंक्शन को गुमनाम करें। यह जावास्क्रिप्ट चर चर देखने के लिए उपयोगी हो सकता है ।
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);
});
दूसरा, यदि आप स्पष्ट रूप से जावास्क्रिप्ट के भीतर रिटर्न नहीं कहते हैं, तो फ़ंक्शन जारी रहेगा। मैं खुद इस बात से कन्नी काट गया । अंत में, जावास्क्रिप्ट एक ईवेंट-चालित लूप चलाता है जिसका अर्थ है कि यह मानों को वापस करने के लिए फ़ंक्शंस का कभी इंतजार नहीं करेगा, यही वजह है कि हमारे पास ये सभी कॉलबैक पहले स्थान पर हैं। आप जावास्क्रिप्ट को अलग तरह से व्यवहार करने के लिए मजबूर कर सकते हैं, उदाहरण के लिए जब तक कि एक शर्त सही न हो तब तक लूप का उपयोग करके। इवेंट लूप में हेरफेर करने की विभिन्न रणनीतियों के लिए, caolan द्वारा 'async' लाइब्रेरी देखें । इन तरीकों को अति प्रयोग करने का प्रमुख नुकसान यह है कि वास्तव में सीपीयू चक्रों को अवरुद्ध करना / अवरुद्ध करना जब आपको संभवतः अधिक कॉलबैक का उपयोग करना चाहिए और बस फिर से सोचना चाहिए कि आपके प्रोग्राम कैसे काम करते हैं।