एक कॉलबैक फ़ंक्शन बस एक समारोह यदि आप किसी अन्य समारोह में पारित इतना है कि समारोह बाद में यह कॉल कर सकते हैं यह है: क्योंकि सभी नियंत्रण प्रवाह मॉड्यूल इस पर निर्भर आप इस पद्धति का उपयोग करना चाहिए। यह आमतौर पर एसिंक्रोनस API एस में देखा जाता है; एपीआई कॉल तुरंत लौटाता है क्योंकि यह असीमित है, इसलिए आप इसमें एक फ़ंक्शन पास करते हैं कि API एसिंक्रोनस कार्य करने के दौरान कॉल कर सकता है।
जावास्क्रिप्ट में सबसे सरल उदाहरण मैं सोच सकता हूं setTimeout()
फ़ंक्शन है। यह एक वैश्विक कार्य है जो दो तर्क स्वीकार करता है। पहला तर्क कॉलबैक फ़ंक्शन है और दूसरा तर्क मिलीसेकंड में देरी है।फ़ंक्शन को उचित समय की प्रतीक्षा करने के लिए डिज़ाइन किया गया है, फिर अपने कॉलबैक फ़ंक्शन का आह्वान करें।
setTimeout(function() {
console.log("10 seconds later...");
}, 10000);
आपने उपर्युक्त कोड पहले देखा होगा लेकिन आपको पता नहीं था कि आप जिस समारोह में गुजर रहे थे उसे कॉलबैक फ़ंक्शन कहा जाता था। हम इसे अधिक स्पष्ट बनाने के लिए ऊपर दिए गए कोड को फिर से लिख सकते हैं। क्योंकि नोड जमीन से बनाया गया है ऊपर सब कुछ है कि यह करता है में अतुल्यकालिक होने की
var callback = function() {
console.log("10 seconds later...");
};
setTimeout(callback, 10000);
कॉलबैक नोड में हर जगह उपयोग किया जाता है। फाइल सिस्टम से बात करते समय भी। यही कारण है कि आंतरिक नोड एपीआई का एक टन कॉलबैक फ़ंक्शंस को उस डेटा को वापस करने के बजाय तर्क के रूप में स्वीकार करता है जिसे आप एक चर को असाइन कर सकते हैं। इसके बजाय यह आपके कॉलबैक फ़ंक्शन को आपके द्वारा तर्क के रूप में इच्छित डेटा को पारित करेगा। उदाहरण के लिए, आप फ़ाइल पढ़ने के लिए नोड की fs
लाइब्रेरी का उपयोग कर सकते हैं। fs
मॉड्यूल दो अद्वितीय API फ़ंक्शंस का खुलासा करता है: readFile
और readFileSync
।
readFile
फ़ंक्शन असीमित है जबकि readFileSync
स्पष्ट रूप से नहीं है। आप देख सकते हैं कि वे जब भी संभव हो तो एसिंक कॉल का उपयोग करने का इरादा रखते हैं क्योंकि उन्हें 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
के साथ पकड़ने के लिए कुछ भी नहीं है। कॉलबैक का उपयोग करने वाले उचित एसिंक्रोनस एपीआई हमेशा अपनी त्रुटियों को पकड़ लेंगे और फिर उन त्रुटियों को कॉलबैक में पास करेंगे जहां आप फिट बैठकर इसे संभाल सकते हैं।
कॉलबैक के अलावा, एपीआई की एक और लोकप्रिय शैली है जिसे आम तौर पर वादा कहा जाता है। यदि आप उनके बारे में पढ़ना चाहते हैं तो आप इस उत्तर here पर आधारित पूरे ब्लॉग पोस्ट को पढ़ सकते हैं।
कैसे एक समारोह है कि एक तर्क के रूप एक कॉलबैक लेता लिखने के लिए एक उदाहरण के रूप में एक सरल समारोह बना रहे हैं? – Gntem
हाँ ऐसा कुछ, कोई साधारण उदाहरण जो मुझे समझने में मदद करता है। –
एक कॉलबैक एक ऐसा फ़ंक्शन है जिसे आप किसी अन्य फ़ंक्शन पर पैरामीटर के रूप में पास करते हैं ... Google pls -> "कॉलबैक जावास्क्रिप्ट" -> पहला परिणाम –