Node.js में कॉलबैक नरक से कैसे बचें

समस्याओं को खत्म करने के लिए हमारे साधन का प्रयास करें

Node.js में कॉलबैक नरक से कैसे बचें?

कॉलबैक नरक एक ऐसी घटना है जो एक जावास्क्रिप्ट डेवलपर को प्रभावित करती है जब वह एक के बाद एक कई एसिंक्रोनस ऑपरेशन निष्पादित करने का प्रयास करता है। कुछ लोग इसे कहते हैं कयामत का पिरामिड .

आइए एक उदाहरण देखें जिसे हम कॉलबैक नरक कहते हैं।

doSomething(param1, param2, function(err, paramx){ doMore(paramx, function(err, result){ insertRow(result, function(err){ yetAnotherOperation(someparameter, function(s){ somethingElse(function(x){ }); }); }); }); });

ध्यान दें- उपरोक्त कोड प्रदर्शन के लिए है न कि कार्यशील कोड के लिए।



यह सिर्फ कंकाल से ही खराब दिख रहा है। वास्तविक कोड में आपके पास स्पष्ट रूप से अन्य कथन होंगे जैसे |_+_|, |_+_| या इन नेस्टेड कार्यों के साथ कुछ अन्य संचालन। उन्हें उपरोक्त कोड में जोड़ें और यह वास्तव में गन्दा और असहनीय हो जाएगा।

अद्यतन: Node.js 7.10.0 . में रिलीज़ होने के बाद अद्भुत async-प्रतीक्षा जोड़ा गया

प्रो टिप

अपने कार्यों को ओवरलोड न करें। अधिकांश बार यह संभव हो सकता है कि आप जिस वास्तविक समस्या का सामना कर रहे हैं वह नहीं है कॉलबैक नरक , बल्कि यह खराब लिखित कार्य है। ऐसे मामलों में, जो समाधान हम नीचे देखेंगे, वे आपके कोड की संरचना करेंगे लेकिन वे आपकी वास्तविक समस्या का समाधान नहीं करेंगे। तो, एक नियम के रूप में, अपने कार्य को कम करें, जिसका अर्थ है कि एक ही कार्य को पूरा करने वाले छोटे कार्य लिखें।

कॉलबैक नरक से बचने की तकनीक

कॉलबैक नरक से निपटने के लिए कई तकनीकें हैं। इस ट्यूटोरियल में, हम विशेष रूप से नीचे दिए गए दो पर एक नज़र डालेंगे।

  1. Async.js का उपयोग करना

  2. वादों का उपयोग करना

  3. Async-प्रतीक्षा का उपयोग करना

Async.js का उपयोग करके कॉलबैक प्रबंधित करना

अतुल्यकालिक जावास्क्रिप्ट की अतुल्यकालिक प्रकृति के प्रबंधन के लिए वास्तव में शक्तिशाली npm मॉड्यूल है। Node.js के साथ, यह ब्राउज़रों के लिए लिखे गए जावास्क्रिप्ट के लिए भी काम करता है।

Async विभिन्न परिदृश्यों में अतुल्यकालिक प्रक्रियाओं के साथ काम करने के लिए बहुत सारी शक्तिशाली उपयोगिताएँ प्रदान करता है।

सामग्री-यूआई टैब राउटर पर प्रतिक्रिया करते हैं

इंस्टालेशन

if

async.waterfall ()
हमारी समस्या के लिए, हम विशेष रूप से async के दो कार्यों को देखेंगे। यानी |_+_| और |_+_|
Async Waterfall तब उपयोगी होता है जब आप कुछ कार्यों को एक के बाद एक निष्पादित करना चाहते हैं और साथ ही पिछले कार्य के परिणाम को अगले कार्य में स्थानांतरित करना चाहते हैं।

|_+_| कार्यों की एक सरणी लेता है |_+_| और एक फाइनल |_+_| फ़ंक्शन जिसे |_+_| . में सभी कार्यों के बाद कहा जाता है पूरा कर लिया है या |_+_| त्रुटि के साथ कहा जाता है।
बेहतर समझ के लिए नीचे देखें।

ASYNC जलप्रपात

for

तो |_+_| का उपयोग करके, आप कोड को क्षैतिज रूप से इंडेंट करने और कयामत के पिरामिड में प्रवेश करने के बजाय लंबवत रूप से लिख रहे होंगे। साथ ही आपका कोड अधिक व्यवस्थित और पढ़ने में आसान होगा।

async.series ()
Async श्रृंखला में निष्पादन को संभालने के लिए एक और फ़ंक्शन प्रदान करता है, |_+_|। Async श्रृंखला Async जलप्रपात के समान तरीके से काम करती है, एक के बाद एक सरणी में फ़ंक्शन निष्पादित करके इस अंतर के साथ कि यह डेटा को एक फ़ंक्शन से दूसरे फ़ंक्शन में पास नहीं करेगा, इसके बजाय जब सभी फ़ंक्शंस ने अपना निष्पादन पूरा कर लिया है फ़ंक्शन अंतिम कॉलबैक में एक सरणी के रूप में उपलब्ध होंगे। |_+_| . के समान में |_+_| साथ ही, जब किसी भी फ़ंक्शन को त्रुटि कॉलबैक के साथ बुलाया जाता है, तो सरणी में कोई और फ़ंक्शन निष्पादित नहीं होता है और अंतिम कॉलबैक तुरंत त्रुटि के मान के साथ बुलाया जाता है। एक स्पष्ट तस्वीर के लिए नीचे देखें।

ASYNC श्रृंखला

npm install --save async

async मॉड्यूल के साथ और भी शानदार फंक्शन उपलब्ध हैं, सुनिश्चित करें कि आप उन्हें देखें और इसे अपने Node.js प्रोजेक्ट्स में उपयोग करें।
यहां जीथब पेज पर जाएं: Async.js गीथूब

वादों का उपयोग करके कॉलबैक नरक को प्रबंधित करना

एसिंक्रोनस कोड से निपटने के दौरान वादे कॉलबैक के विकल्प होते हैं। वादे परिणाम या त्रुटि अपवाद का मूल्य लौटाते हैं। वादों का मूल है |_+_| फ़ंक्शन, जो वादा वस्तु के वापस आने की प्रतीक्षा करता है। |_+_| फ़ंक्शन दो वैकल्पिक कार्यों को तर्क के रूप में लेता है और वादे की स्थिति के आधार पर केवल एक को कभी भी बुलाया जाएगा। वादा पूरा होने पर पहला कार्य कहा जाता है (एक सफल परिणाम)। दूसरा फ़ंक्शन तब कहा जाता है जब वादा अस्वीकार कर दिया जाता है।
आइए हम एक विशिष्ट वादे की संरचना को देखें।

वादे

async.waterfall`)

जंजीर वादों

हम वादे भी कर सकते हैं, यह नेस्टिंग कॉलबैक का एक समान विकल्प है। वादों को पूरा करने के दो तरीके हैं। वादों को हैंडलर (.then() फ़ंक्शन) के अंदर या बाहर जंजीर में बांधा जा सकता है। हैंडल के बाहर चेनिंग वादे बहुत साफ और पढ़ने में आसान है, लेकिन अगर हम अपने अगले हैंडलर में कुछ पैरामीटर का उपयोग करना चाहते हैं जो पिछले हैंडलर के दायरे में उपलब्ध है, तो हमें हैंडलर के अंदर चेन वादे करने पड़ सकते हैं। हालांकि हैंडलर के अंदर बहुत अधिक जंजीर फिर से क्षैतिज कोड में परिणत होगी जिससे हम बचने की कोशिश कर रहे हैं। हम अंदर और बाहर की श्रृंखलाओं के संयोजन के साथ वादों को भी श्रृंखलाबद्ध कर सकते हैं। एक सामान्य नियम के रूप में, मैं आपको हैंडलर के अंदर जंजीर से बचने की सलाह दूंगा।

इसके अलावा, वादों को पूरा करने के बारे में एक और अच्छी बात यह है कि हम किसी भी फ़ंक्शन में होने वाली किसी भी त्रुटि को पकड़ने के लिए श्रृंखला के अंत में एक कैच ब्लॉक भी जोड़ सकते हैं।

चेनिंग वादे

async.series().

एक फ़ंक्शन बनाना जो |_+_| . देता है
वादों के साथ काम करने वाला एक फ़ंक्शन बनाने के लिए हम इन-बिल्ट प्रॉमिस क्लास का उपयोग कर सकते हैं।

परिवार का नक्शा काम नहीं कर रहा
async.waterfall()

एक वादा सफल माना जाता है यदि मूल्य के साथ लौटाया जाता है |_+_| विधि और असफल अगर इसे |_+_| . के साथ वापस किया जाता है तरीका।

कॉलबैक को वादों में बदलना

वादों के लिए कुछ अच्छे पुस्तकालय हैं, हम लोकप्रिय से उदाहरण देखेंगे क्रिस्कोवाल की क्यू पुस्तकालय का वादा करता है। सुनिश्चित करें कि आपके पास q स्थापित है।

‘tasks‘

वादों के लिए कॉलबैक

‘callback‘

Async प्रतीक्षा का उपयोग करना

Node.js में हाल ही में सामने आने वाली सबसे अच्छी चीजों में से एक है async-वेट फीचर। Async प्रतीक्षा अतुल्यकालिक कोड को सिंक्रोनस की तरह बनाता है। यह केवल नोड.जेएस में वादों के पुन: परिचय के कारण ही संभव हुआ है। Async-Await केवल उन कार्यों के साथ काम करता है जो एक वादा वापस करते हैं।

अभी कॉलबैक नरक से बचने का सबसे अच्छा तरीका Node.js में async-wait का उपयोग करना है। इसे एक उदाहरण से समझते हैं।

ASYNC-प्रतीक्षा

tasks

यदि आप ऊपर देखते हैं तो हमारे पास एक फ़ंक्शन है जो हमें 1 सेकंड के बाद एक यादृच्छिक संख्या देता है। यह फ़ंक्शन एक वादा लौटाता है। |_+_| . का उपयोग करना कीवर्ड हम जावास्क्रिप्ट को आगे बढ़ने से पहले परिणाम की प्रतीक्षा करने के लिए कहते हैं। लेकिन यह |_+_| कीवर्ड केवल उन कार्यों के भीतर काम करता है जिन्हें |_+_| के रूप में घोषित किया गया है। जब हम किसी फ़ंक्शन को |_+_| के रूप में घोषित करते हैं, तो हम जावास्क्रिप्ट को निष्पादन को तब तक निलंबित करने के लिए कह रहे हैं जब तक कि परिणाम आने पर |_+_| खोजशब्द।

अब, त्रुटि को संभालने के वादे में हम सीधे कैच ब्लॉक को चेन कर सकते हैं। उपरोक्त मामले में आप इसे कैसे करेंगे? ठीक है, हम बस एक |_+_| . का उपयोग कर सकते हैं खंड मैथा।
तो हमारा उपरोक्त उदाहरण इस तरह दिखेगा…

ASYNC-प्रतीक्षा

callback

ध्यान देने योग्य एक और महत्वपूर्ण बात यह है कि जब भी आप किसी फंक्शन को |_+_| . घोषित करते हैं वह फ़ंक्शन वापस आ जाएगा|_+_|

निष्कर्ष

हमने देखा है कि कैसे हम Node.js में कॉलबैक नरक की समस्या से निपट सकते हैं। समस्या को हल करने के कुछ और तरीके हैं जैसे जनरेटर का उपयोग करना, मॉडर्नाइजेशन आदि। लेकिन हमें लगता है कि एसिंक लाइब्रेरी और वादे कॉलबैक नरक से निपटने के लिए दो वास्तविक समाधान हैं। लेकिन वह |_+_| के आने तक ही था। साथ |_+_| यहां आपको अपने कोड को साफ और व्यवस्थित करने के लिए तुरंत अपने कार्यक्रमों में इसका उपयोग करना शुरू कर देना चाहिए। हालांकि, याद रखें कि हमने पहले क्या चर्चा की थी, आपकी मुख्य समस्या कॉलबैक नरक नहीं हो सकती है, यह खराब लिखित कार्य हो सकती है। सुनिश्चित करें कि आप अपने कार्यों को पतला रखते हैं और एक ही कार्य पर ध्यान केंद्रित करते हैं। आप एसिंक्स और वादों के बारे में तभी सीखेंगे जब आप उनका उपयोग करेंगे। तो सुनिश्चित करें कि आप अगली बार अपनी परियोजनाओं में उन्हें आजमाएं।

पढ़ने के लिए धन्यवाद !

#नोड #नोडज #जावास्क्रिप्ट

यह सभी देखें: