कॉलबैक फ़ंक्शन केवल एक फ़ंक्शन है जिसे आप किसी अन्य फ़ंक्शन में पास करते हैं ताकि फ़ंक्शन बाद में इसे कॉल कर सके। यह आमतौर पर अतुल्यकालिक एपीआई एस में देखा जाता है ; एपीआई कॉल तुरंत वापस आ जाता है क्योंकि यह अतुल्यकालिक है, इसलिए आप इसमें एक फ़ंक्शन पास करते हैं जिसे एपीआई तब कॉल कर सकता है जब यह अपने अतुल्यकालिक कार्य को पूरा कर रहा हो।
जावास्क्रिप्ट में सबसे आसान उदाहरण मैं सोच सकता हूं कि यह setTimeout()
फंक्शन है। यह एक वैश्विक कार्य है जो दो तर्कों को स्वीकार करता है। पहला तर्क कॉलबैक फ़ंक्शन है और दूसरा तर्क मिलीसेकंड में देरी है। फ़ंक्शन को उपयुक्त समय की प्रतीक्षा करने के लिए डिज़ाइन किया गया है, फिर अपने कॉलबैक फ़ंक्शन को आमंत्रित करें।
setTimeout(function () {
console.log("10 seconds later...");
}, 10000);
आपने उपरोक्त कोड पहले देखा होगा, लेकिन अभी आपको उस फ़ंक्शन का एहसास नहीं हुआ था जिसे आप पास कर रहे थे जिसे कॉलबैक फ़ंक्शन कहा जाता था। हम इसे और अधिक स्पष्ट करने के लिए ऊपर दिए गए कोड को फिर से लिख सकते हैं।
var callback = function () {
console.log("10 seconds later...");
};
setTimeout(callback, 10000);
नोड में सभी जगह कॉलबैक का उपयोग किया जाता है क्योंकि नोड को जमीन से बनाया गया है जो कि हर चीज में अतुल्यकालिक है। फाइल सिस्टम से बात करते समय भी। यही कारण है कि आंतरिक नोड एपीआई का एक टन कॉलबैक फ़ंक्शन को तर्क के रूप में स्वीकार करता है, जो आपको एक चर पर असाइन किए गए डेटा को वापस करने के बजाय कर सकता है। इसके बजाय यह आपके कॉलबैक फ़ंक्शन का आह्वान करेगा, एक तर्क के रूप में आपके द्वारा वांछित डेटा को पारित करना। उदाहरण के लिए, आप fs
फ़ाइल पढ़ने के लिए नोड की लाइब्रेरी का उपयोग कर सकते हैं । fs
मॉड्यूल दो अद्वितीय एपीआई कार्यों को उजागर करता है: readFile
और readFileSync
।
readFile
समारोह अतुल्यकालिक है, जबकि readFileSync
स्पष्ट रूप से नहीं है। आपको लगता है कि वे आप async कॉल जब भी संभव हो, क्योंकि वे उन्हें बुलाया उपयोग करना चाहते हैं देख सकते हैं readFile
और readFileSync
के बजाय readFile
और readFileAsync
। यहां दोनों कार्यों का उपयोग करने का एक उदाहरण है।
तुल्यकालिक:
var data = fs.readFileSync('test.txt');
console.log(data);
ब्लॉक थ्रेड निष्पादन से ऊपर कोड तक सभी सामग्री test.txt
को मेमोरी में पढ़ा जाता है और चर में संग्रहीत किया जाता है data
। नोड में यह आमतौर पर बुरा अभ्यास माना जाता है। हालांकि कई बार यह उपयोगी होता है, जैसे कि कुछ सरल लेकिन थकाऊ करने के लिए त्वरित लिपि लिखना और आप समय के हर नैनोसेकंड को बचाने के बारे में ज्यादा परवाह नहीं करते हैं।
अतुल्यकालिक (कॉलबैक के साथ):
var callback = function (err, data) {
if (err) return console.error(err);
console.log(data);
};
fs.readFile('test.txt', callback);
पहले हम एक कॉलबैक फ़ंक्शन बनाते हैं जो दो तर्कों को स्वीकार करता है err
और data
। अतुल्यकालिक कार्यों के साथ एक समस्या यह है कि त्रुटियों को फंसाना अधिक कठिन हो जाता है इसलिए कॉलबैक फ़ंक्शन के पहले तर्क के रूप में बहुत सारे कॉलबैक-शैली एपीआई त्रुटियों को पारित करते हैं। यह जांचने के लिए सबसे अच्छा अभ्यास है err
कि क्या आपके पास कुछ और करने से पहले एक मूल्य है। यदि ऐसा है, तो कॉलबैक का निष्पादन बंद करें और त्रुटि लॉग करें।
सिंक्रोनस कॉल का एक फायदा होता है जब वहाँ अपवादों को फेंक दिया जाता है क्योंकि आप बस उन्हें एक try/catch
ब्लॉक के साथ पकड़ सकते हैं ।
try {
var data = fs.readFileSync('test.txt');
console.log(data);
} catch (err) {
console.error(err);
}
अतुल्यकालिक कार्यों में यह उस तरह से काम नहीं करता है। एपीआई कॉल तुरंत लौटाता है ताकि पकड़ने के लिए कुछ भी न होtry/catch
। उचित अतुल्यकालिक एपीआई जो कॉलबैक का उपयोग करते हैं, वे हमेशा अपनी त्रुटियों को पकड़ेंगे और फिर कॉलबैक में उन त्रुटियों को पारित करेंगे जहां आप इसे फिट होते हुए देख सकते हैं।
हालांकि कॉलबैक के अलावा, एपीआई की एक और लोकप्रिय शैली है जिसे आमतौर पर वादा कहा जाता है। आप उनके बारे में पढ़ना चाहते हैं तो आप पूरे ब्लॉग पोस्ट मैं इस उत्तर के आधार पर लिखा पढ़ सकते हैं यहाँ ।