नोडजेज कॉलबैक सरल उदाहरण है


120

क्या कोई मुझे नोडजेज कॉलबैक का एक सरल उदाहरण दे सकता है, मैंने पहले ही कई वेबसाइटों पर समान खोजा है लेकिन इसे ठीक से समझने में सक्षम नहीं है, कृपया मुझे एक सरल उदाहरण दें।

getDbFiles(store, function(files){
    getCdnFiles(store, function(files){
    })
})

मैं ऐसा कुछ करना चाहता हूं ...


एक फ़ंक्शन लिखने के लिए एक उदाहरण जो एक तर्क के रूप में कॉलबैक लेता है?
गेंटम

हाँ ऐसा कुछ, कोई भी सरल उदाहरण जो मुझे इसे समझने में मदद करता है।
भूषण गोयल

2
एक कॉलबैक एक फ़ंक्शन है जिसे आप किसी अन्य फ़ंक्शन के पैरामीटर के रूप में पास करते हैं ... Google pls -> "कॉलबैक जावास्क्रिप्ट" -> पहला परिणाम
गेब्रियल लामलास

जवाबों:


198
var myCallback = function(data) {
  console.log('got data: '+data);
};

var usingItNow = function(callback) {
  callback('get it?');
};

अब नोड या ब्राउज़र कंसोल खोलें और उपरोक्त परिभाषाएँ चिपकाएँ।

अंत में इसे इस अगली पंक्ति के साथ उपयोग करें:

usingItNow(myCallback);

नोड-स्टाइल त्रुटि सम्मेलनों के सम्मान के साथ

कोस्टा ने पूछा कि अगर हम नोड त्रुटि कॉलबैक सम्मेलनों का सम्मान करेंगे तो यह कैसा लगेगा।

इस सम्मेलन में, कॉलबैक को त्रुटि के रूप में कम से कम एक तर्क, पहला तर्क प्राप्त करने की अपेक्षा करनी चाहिए। वैकल्पिक रूप से हमारे पास संदर्भ के आधार पर एक या अधिक अतिरिक्त तर्क होंगे। इस मामले में, प्रसंग हमारा उपरोक्त उदाहरण है।

यहां मैं इस सम्मेलन में हमारे उदाहरण को फिर से लिखता हूं।

var myCallback = function(err, data) {
  if (err) throw err; // Check for the error and throw if it exists.
  console.log('got data: '+data); // Otherwise proceed as usual.
};

var usingItNow = function(callback) {
  callback(null, 'get it?'); // I dont want to throw an error, so I pass null for the error argument
};

यदि हम एक त्रुटि मामले का अनुकरण करना चाहते हैं, तो हम इस तरह का उपयोग करके इसे परिभाषित कर सकते हैं

var usingItNow = function(callback) {
  var myError = new Error('My custom error!');
  callback(myError, 'get it?'); // I send my error as the first argument.
};

अंतिम उपयोग उपरोक्त के समान ही है:

usingItNow(myCallback);

व्यवहार में एकमात्र अंतर usingItNowआपके द्वारा परिभाषित किए गए संस्करण पर निर्भर करेगा : पहला तर्क के लिए कॉलबैक पर "सत्य मान" (एक त्रुटि ऑब्जेक्ट) को फीड करने वाला, या वह जो इसे त्रुटि तर्क के लिए अशक्त करता है। ।


तो यह पहले पैरामीटर सम्मेलन के रूप में त्रुटि के साथ कैसा दिखता है?
कोस्टा

113

कॉलबैक फ़ंक्शन केवल एक फ़ंक्शन है जिसे आप किसी अन्य फ़ंक्शन में पास करते हैं ताकि फ़ंक्शन बाद में इसे कॉल कर सके। यह आमतौर पर अतुल्यकालिक एपीआई एस में देखा जाता है ; एपीआई कॉल तुरंत वापस आ जाता है क्योंकि यह अतुल्यकालिक है, इसलिए आप इसमें एक फ़ंक्शन पास करते हैं जिसे एपीआई तब कॉल कर सकता है जब यह अपने अतुल्यकालिक कार्य को पूरा कर रहा हो।

जावास्क्रिप्ट में सबसे आसान उदाहरण मैं सोच सकता हूं कि यह 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 । उचित अतुल्यकालिक एपीआई जो कॉलबैक का उपयोग करते हैं, वे हमेशा अपनी त्रुटियों को पकड़ेंगे और फिर कॉलबैक में उन त्रुटियों को पारित करेंगे जहां आप इसे फिट होते हुए देख सकते हैं।

हालांकि कॉलबैक के अलावा, एपीआई की एक और लोकप्रिय शैली है जिसे आमतौर पर वादा कहा जाता है। आप उनके बारे में पढ़ना चाहते हैं तो आप पूरे ब्लॉग पोस्ट मैं इस उत्तर के आधार पर लिखा पढ़ सकते हैं यहाँ


3
काफी विस्तृत अभी तक अवधारणा के संक्षिप्त वितरण; मेरे जैसे एक नोड के लिए। स्टार्टर ...
kmonsoor

3
बहुत से संदर्भ प्रदान करने के लिए +1। न केवल कॉलबैक फ़ंक्शन क्या दिखते हैं, बल्कि वे क्या हैं, उनका उपयोग क्यों किया जाता है, और उनका उपयोग क्यों किया जाता है। वास्तव में एक शुरुआत के लिए उपयोगी।
अज़र्सपॉट

1
महान! यह अपने आप में एक पोस्ट हो सकता है!
पाब्लो ग्लीज़

1
यह है , और इसमें वादों के बारे में एक दूसरा हिस्सा शामिल है ;)
Chev

1
यह स्वीकृत उत्तर की तुलना में बहुत बेहतर व्याख्या है! मैं यहाँ पर हर स्वीकृत उत्तर को पसंद करूंगा - ऐसा न केवल कोड का एक टुकड़ा है जो समस्या को हल करता है, बल्कि WHY और HOW भी इस समस्या को हल करता है। असल में, यह जवाब और कॉलबैक आपको कॉलबैक क्या है, इसकी एक ठोस समझ देगा।
रूसी

10

यहाँ पाठ फ़ाइल की प्रतिलिपि बनाने का एक उदाहरण है fs.readFileऔर fs.writeFile:

var fs = require('fs');

var copyFile = function(source, destination, next) {
  // we should read source file first
  fs.readFile(source, function(err, data) {
    if (err) return next(err); // error occurred
    // now we can write data to destination file
    fs.writeFile(destination, data, next);
  });
};

और यह copyFileफ़ंक्शन का उपयोग करने का एक उदाहरण है :

copyFile('foo.txt', 'bar.txt', function(err) {
  if (err) {
    // either fs.readFile or fs.writeFile returned an error
    console.log(err.stack || err);
  } else {
    console.log('Success!');
  }
});

सामान्य नोड.जेएस पैटर्न बताता है कि कॉलबैक फ़ंक्शन का पहला तर्क एक त्रुटि है। आपको इस पैटर्न का उपयोग करना चाहिए क्योंकि सभी नियंत्रण प्रवाह मॉड्यूल इस पर भरोसा करते हैं:

next(new Error('I cannot do it!')); // error

next(null, results); // no error occurred, return result

2
आगे क्या है? चर परिणाम क्या है = क्या कहा जा रहा है?
घुमंतू कोडर

3
@ सीमिकोलोन मेरे लिए एक पॉइंटर के साथ-साथ अन्य के लिए एक संकेतक: stackoverflow.com/questions/5384526/javascript-node-js-next
kmonsoor

7

इस उदाहरण को जितना आप पढ़ सकते हैं, उतनी ही सरलता से आज़माएं, एप्लिकेशन को चलाने के लिए newfile.js नोड न्यूफ़ाइल को कॉपी करें।

function myNew(next){
    console.log("Im the one who initates callback");
    next("nope", "success");
}


myNew(function(err, res){
    console.log("I got back from callback",err, res);
});

3

हम एक सरल कार्य बना रहे हैं

callBackFunction (data, function ( err, response ){
     console.log(response)
}) 

// callbackfunction 
function callBackFuntion (data, callback){
    //write your logic and return your result as
callback("",result) //if not error
callback(error, "") //if error
}

1
const fs = require('fs');

fs.stat('input.txt', function (err, stats) {
    if(err){
        console.log(err);
    } else {
        console.log(stats);
        console.log('Completed Reading File');
    }
});

'fs' एक नोड मॉड्यूल है जो आपको फ़ाइल पढ़ने में मदद करता है। कॉलबैक फ़ंक्शन यह सुनिश्चित करेगा कि निष्पादित होने से पहले 'input.txt' नाम की आपकी फ़ाइल पूरी तरह से पढ़ी जाए। fs.stat () फंक्शन फाइल की जानकारी प्राप्त करने के लिए होता है, जैसे फाइल का आकार, तिथि निर्मित और संशोधित तिथि।



0

A callbackएक फंक्शन है जिसे एक पैरामीटर Higher Order Function( विकिपीडिया ) के रूप में पास किया जाता है । कॉलबैक का एक सरल कार्यान्वयन होगा:

const func = callback => callback('Hello World!');

फ़ंक्शन को कॉल करने के लिए, फ़ंक्शन फ़ंक्शन के तर्क के रूप में सरल एक और फ़ंक्शन पास करें।

func(string => console.log(string));

0

इस ब्लॉग-पोस्ट में एक अच्छा लेखन है:

https://codeburst.io/javascript-what-the-heck-is-a-callback-aba4da2deced

function doHomework(subject, callback) {
  alert(`Starting my ${subject} homework.`);
  callback();
}

function alertFinished(){
  alert('Finished my homework');
}

doHomework('math', alertFinished);

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.