कॉलबैक फंक्शन ऐसे फंक्शन होते हैं जिन्हें आर्गुमेंट के रूप में पास किया जाता है। प्रोग्रामिंग का यह तरीका सिंक्रोनस और असिंक्रोनस, दोनों तरह की प्रोग्रामिंग में एक के बाद एक फंक्शन कॉल का क्रम बनाता है। कॉलबैक फंक्शन लिखना कोई और फंक्शन लिखने से अलग नहीं है। फर्क बस इतना है कि कॉलबैक फंक्शन का सिग्नेचर वैसा ही होना चाहिए जैसा उसे कॉल करने वाला फंक्शन तय करता है।
const squareLength = 5;
// Caller function takes a callback function
function applyToSquare(callback) {
return callback(squareLength);
}
// Callback must expect the possible argument from the calling function
function areaOfSquare(number) {
return number * number;
}
applyToSquare(areaOfSquare); // => 25
आप कॉलबैक को फंक्शन एक्सप्रेशन, अनाम फंक्शन एक्सप्रेशन या ऐरो फंक्शन एक्सप्रेशन के रूप में भी लिख सकते हैं:
applyToSquare(function squarePerimeter(side) {
return side * 4;
});
applyToSquare(function (side) {
return side * 4;
});
applyToSquare((side) => {
return side * 4;
});
आप अपने ग्राहकों के लिए एक नया ऑनलाइन पोर्टल बना रहे हैं, जहाँ से वे ताज़े फल सीधे फल विक्रेता से मंगा सकें। फल विक्रेता के पास एक API है, जिसकी मदद से आप देख सकते हैं कि आपके ग्राहकों को जो चाहिए, वह उसके पास मौजूद है या नहीं। फल विक्रेता के API से बात करने के लिए आपको फंक्शन की एक छोटी लाइब्रेरी बनानी है।
अगर ऑर्डर सफल हो जाए, तो पोर्टल को अपने ग्राहक को सूचित करना चाहिए।
आप onSuccess कॉलबैक फंक्शन बनाइए, जिसे तब कॉल किया जाएगा जब फल विक्रेता के पास पर्याप्त फल स्टॉक में होने की वजह से ऑर्डर सफल हो जाए।
इस फंक्शन को इम्पोर्ट किए गए notify फंक्शन को कॉल करना चाहिए और उसे { message: 'SUCCESS' } पास करना चाहिए, ताकि आपके ग्राहक को पता चले कि उनका ऑर्डर सफल रहा।
onSuccess();
// => `notify` called with `{ message: 'SUCCESS' }`
अगर ऑर्डर असफल हो जाए, तो पोर्टल को अपने ग्राहक को सूचित करना चाहिए।
आप onError कॉलबैक फंक्शन बनाइए, जिसे तब कॉल किया जाएगा जब ऑर्डर इसलिए असफल हो जाए कि फल विक्रेता के पास वह फल स्टॉक में नहीं है या कोई एरर आ गया हो।
इस फंक्शन को इम्पोर्ट किए गए notify फंक्शन को कॉल करना चाहिए और उसे { message: 'ERROR' } पास करना चाहिए, ताकि आपके ग्राहक को पता चले कि उनका ऑर्डर असफल रहा।
onError();
// => `notify` called with `{ message: 'ERROR' }`
फल के ऑर्डर दिए गए order फंक्शन के जरिए फल विक्रेता के API से किए जाते हैं।
यह फंक्शन तीन आर्गुमेंट लेता है: एक क्वेरी, जिसमें मांगे गए फल की variety और quantity होती है; एक कॉलबैक फंक्शन, जिसे ऑर्डर सफल होने पर कॉल किया जाता है; और एक कॉलबैक फंक्शन, जिसे ऑर्डर में एरर आने पर कॉल किया जाता है।
आप अपने कोडबेस को आगे हो सकने वाले बाहरी बदलावों से बचाना चाहते हैं, इसलिए तय करते हैं कि order फंक्शन की कॉल को orderFromGrocer नाम के एक नए फंक्शन के अंदर लपेट देंगे।
आप orderFromGrocer फंक्शन लागू कीजिए, जो फल विक्रेता के API के order फंक्शन को कॉल करके ऑर्डर देने की कोशिश करता है। ध्यान रखिए कि orderFromGrocer में पास किए गए आर्गुमेंट उसी तरह API कॉल तक भी पहुँचें।
क्वेरी एक ऑब्जेक्ट के रूप में होती है:
const query = {
variety: string,
quantity: number,
};
orderFromGrocer(
{ variety: 'pear', quantity: 12 },
exampleSuccessCallback,
exampleErrorCallback,
);
// => `order` was called with the query and the callbacks
अब आपके ग्राहक आपके पोर्टल से फल के ऑर्डर दे पाते हैं। लेकिन आप देखते हैं कि आप अपने कोडबेस में कई अलग-अलग जगहों पर orderFromGrocer फंक्शन को कॉल कर रहे हैं, और हर बार आर्गुमेंट के तौर पर एक query और दोनों callback फंक्शन पास करने पड़ते हैं।
अपने कोड को रीफैक्टर करने का मौका देखकर आपको लगता है कि अगर सिर्फ जरूरी फल की variety और quantity पास करके ऑर्डर दिया जा सके, तो यह ज़्यादा आसान होगा।
आप postOrder सहायक फंक्शन बनाइए, जो variety और quantity को आर्गुमेंट के तौर पर लेता है और फल विक्रेता के पास ऑर्डर देने की कोशिश करता है।
postOrder('peach', 100);
// => order placed for 100 peaches
Exercism पर साइन अप कीजिए और JavaScript को 37 कॉन्सेप्ट159 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।