पिछले ट्यूटोरियल में, आपने कॉलबैक फ़ंक्शंस देखे होंगे जो एसिंक्रोनस इवेंट्स के लिए उपयोग किए जाते हैं। लेकिन कभी-कभी कॉलबैक फ़ंक्शंस एक बुरा सपना बन सकते हैं जब वे नेस्टेड होने लगते हैं, और प्रोग्राम लंबा और जटिल होने लगता है।
इस ट्यूटोरियल में, आप सीखेंगे-
- वादे क्या हैं?
- वादे करने के लिए कॉलबैक
- नेस्टेड वादों से निपटना
- एक कस्टम वादा बनाना
वादे क्या हैं?
इससे पहले कि हम वादों से शुरू करें, चलिए पहले बताते हैं कि Node.js. में "कॉलबैक" फ़ंक्शन क्या हैं हमने पिछले अध्यायों में इन कॉलबैक फ़ंक्शंस को बहुत देखा है, तो चलो जल्दी से उनमें से एक के माध्यम से चलते हैं।
नीचे दिए गए उदाहरण में एक कोड स्निपेट दिखाया गया है, जिसका उपयोग एक MongoDB डेटाबेस से कनेक्ट करने और डेटाबेस में रिकॉर्ड में से किसी एक पर एक अपडेट ऑपरेशन करने के लिए किया जाता है।
-
उपरोक्त कोड में, फ़ंक्शन (इरेट, डीबी) का हिस्सा एक अनाम या कॉलबैक फ़ंक्शन की घोषणा के रूप में जाना जाता है। जब MongoClient MongoDB डेटाबेस से एक कनेक्शन बनाता है, तो कनेक्शन ऑपरेशन पूरा होने के बाद यह कॉलबैक फ़ंक्शन पर वापस आ जाएगा। तो एक अर्थ में, कनेक्शन संचालन पृष्ठभूमि में होता है, और जब यह किया जाता है, तो यह हमारे कॉलबैक फ़ंक्शन को कॉल करता है। याद रखें कि यह Node.js के प्रमुख बिंदुओं में से एक है जो कई अभियानों को समवर्ती रूप से होने देता है और इस प्रकार किसी भी उपयोगकर्ता को एक ऑपरेशन करने से रोकता नहीं है।
-
जब कॉलबैक फ़ंक्शन वास्तव में कहा जाता है तो दूसरा कोड ब्लॉक निष्पादित होता है। कॉलबैक फ़ंक्शन हमारे MongoDB डेटाबेस में सिर्फ एक रिकॉर्ड अपडेट करता है।
तो फिर एक वादा क्या है? खैर, एक वादा Node.js. में कॉलबैक फ़ंक्शंस के लिए एक वृद्धि है विकास जीवनचक्र के दौरान, एक उदाहरण हो सकता है जहां आपको एक साथ कई कॉलबैक फ़ंक्शन को घोंसला बनाने की आवश्यकता होगी। यह समय में एक निश्चित बिंदु पर बनाए रखने के लिए गन्दा और कठिन हो सकता है। संक्षेप में, एक वादा कॉलबैक को बढ़ाने वाला है जो इन समस्याओं को कम करने की ओर देखता है।
वादे का मूल सिंटैक्स नीचे दिखाया गया है;
var promise = doSomethingAync()promise.then(onFulfilled, onRejected)
- "doSomethingAync" कोई भी कॉलबैक या अतुल्यकालिक फ़ंक्शन है जो किसी प्रकार की प्रोसेसिंग करता है।
- इस बार, कॉलबैक को परिभाषित करते समय, एक मूल्य होता है जिसे "वादा" कहा जाता है।
- जब कोई वादा वापस किया जाता है, तो इसमें 2 आउटपुट हो सकते हैं। इसे 'फिर क्लॉज' द्वारा परिभाषित किया गया है। या तो ऑपरेशन एक सफलता हो सकती है जिसे 'ऑनफुलफिल्ड' पैरामीटर द्वारा दर्शाया जाता है। या इसमें एक त्रुटि हो सकती है जिसे 'ऑनराइक्ड' पैरामीटर द्वारा दर्शाया जाता है।
नोट: तो एक वादा का मुख्य पहलू वापसी मूल्य है। Node.js. में सामान्य कॉलबैक के साथ काम करते समय वापसी मूल्य की कोई अवधारणा नहीं है वापसी मूल्य के कारण, हमारे पास अधिक नियंत्रण है कि कॉलबैक फ़ंक्शन को कैसे परिभाषित किया जा सकता है।
अगले विषय में, हम वादों का एक उदाहरण देखेंगे और कॉलबैक से उन्हें कैसे लाभ होगा।
वादे करने के लिए कॉलबैक
अब एक उदाहरण देखते हैं कि हम Node.js एप्लिकेशन के भीतर से "वादों" का उपयोग कैसे कर सकते हैं। Node.js एप्लिकेशन में वादों का उपयोग करने के लिए, 'वादा' मॉड्यूल को पहले डाउनलोड और इंस्टॉल किया जाना चाहिए।
फिर हम नीचे दिखाए गए अनुसार अपने कोड को संशोधित करेंगे, जो वादों का उपयोग करके 'कर्मचारी' संग्रह में एक Employeename को अपडेट करता है।
चरण 1) एनपीएम मॉड्यूल स्थापित करना
एक नोड जेएस आवेदन के भीतर से वादे का उपयोग करने के लिए, वादा मॉड्यूल की आवश्यकता है। वादा मॉड्यूल स्थापित करने के लिए, नीचे दिए गए कमांड को चलाएं
npm स्थापित वादा
चरण 2) वादों को शामिल करने के लिए कोड को संशोधित करें
var Promise = require('promise');var MongoClient = require('mongodb').MongoClient;var url = 'mongodb://localhost/EmployeeDB';MongoClient.connect(url).then(function(err, db) {db.collection('Employee').updateOne({"EmployeeName": "Martin"}, {$set: {"EmployeeName": "Mohan"}});});
कोड स्पष्टीकरण: -
- पहला भाग 'वादा' मॉड्यूल को शामिल करना है जो हमें अपने कोड में वादा कार्यक्षमता का उपयोग करने की अनुमति देगा।
- अब हम अपने MongoClient.connect फ़ंक्शन के लिए 'तब' फ़ंक्शन को जोड़ सकते हैं। तो यह क्या करता है कि जब कनेक्शन को डेटाबेस में स्थापित किया जाता है, तो हमें उसके बाद कोड स्निपेट को निष्पादित करना होगा।
- अंत में, हम अपने कोड स्निपेट को परिभाषित करते हैं जो कर्मचारी के कर्मचारी को "मार्टिन" के नाम "मोहन" के साथ अपडेट करने का काम करता है।
ध्यान दें:-
यदि आप अब अपने MongoDB डेटाबेस की सामग्री की जाँच करते हैं, तो आप पाएंगे कि अगर "मार्टिन" के EmployeeName के साथ एक रिकॉर्ड मौजूद है, तो इसे "मोहन" में अपडेट किया जाएगा।
यह जांचने के लिए कि डेटा को डेटाबेस में ठीक से डाला गया है, आपको MongoDB में निम्न कमांड निष्पादित करने की आवश्यकता है
- EmployeeDB का उपयोग करें
- db.Employee.find ({कर्मचारी नाम: मोहन})
पहला कथन यह सुनिश्चित करता है कि आप EmployeeDb डेटाबेस से जुड़े हैं। दूसरा बयान उस रिकॉर्ड की खोज करता है जिसमें "मोहन" का कर्मचारी नाम है।
नेस्टेड वादों से निपटना
वादों को परिभाषित करते समय, यह ध्यान दिया जाना चाहिए कि "तब" विधि खुद ही एक वादा वापस करती है। इसलिए एक मायने में, वादों को एक दूसरे के साथ जोड़ा या जंजीर बनाया जा सकता है।
नीचे दिए गए उदाहरण में, हम 2 कॉलबैक फ़ंक्शन को परिभाषित करने के लिए चाइनिंग का उपयोग करते हैं, जो दोनों MongoDB डेटाबेस में रिकॉर्ड दर्ज करते हैं।
( नोट : चैनिंग एक अवधारणा है जिसका उपयोग तरीकों के निष्पादन को एक दूसरे से जोड़ने के लिए किया जाता है। मान लीजिए कि यदि आपके आवेदन में 'मेथड' और 'मेथडब' नामक 2 विधियाँ हैं। और तर्क ऐसा था कि 'मेथडब' के बाद 'मेथडब' कहा जाना चाहिए। तब आप निष्पादन को इस तरह से श्रृंखलाबद्ध करेंगे कि 'मेथडब' के बाद सीधे 'मेथडब' कहा जाता है।
इस उदाहरण में ध्यान देने योग्य बात यह है कि नेस्टेड वादों का उपयोग करके कोड क्लीनर, पठनीय और बनाए रखने योग्य हो जाता है।
var Promise = require('promise');var MongoClient = require('mongodb').MongoClient;var url = 'mongodb://localhost/EmployeeDB';MongoClient.connect(url).then(function(db) {db.collection('Employee').insertOne({Employeeid: 4,EmployeeName: "NewEmployee"}).then(function(db1) {db1.collection('Employee').insertOne({Employeeid: 5,EmployeeName: "NewEmployee1"})})});
कोड स्पष्टीकरण: -
- हम अब 2 "परिभाषित कर रहे हैं" फिर "खंड जो एक के बाद एक निष्पादित हो जाते हैं। पहले तब खंड में, हम 'db' पैरामीटर पास कर रहे हैं जिसमें हमारा डेटाबेस कनेक्शन है। फिर हम 'कर्मचारी' संग्रह में रिकॉर्ड डालने के लिए 'db' कनेक्शन की संग्रह संपत्ति का उपयोग कर रहे हैं। कर्मचारी प्रविष्टि में वास्तविक दस्तावेज़ को सम्मिलित करने के लिए 'इन्सर्ट' विधि का उपयोग किया जाता है।
- हम तब 2 nd का उपयोग कर रहे हैं तब खंड भी डेटाबेस में एक और रिकॉर्ड डालने के लिए।
यदि आप अब अपने MongoDB डेटाबेस की सामग्री की जाँच करते हैं, तो आपको MongoDB डेटाबेस में 2 रिकॉर्ड सम्मिलित होंगे।
एक कस्टम वादा बनाना
'क्यू' नामक नोड मॉड्यूल का उपयोग करके एक कस्टम वादा बनाया जा सकता है। नोड पैकेज मैनेजर का उपयोग करके 'q' लाइब्रेरी को डाउनलोड और इंस्टॉल करना होगा। 'Q' लाइब्रेरी का उपयोग करने के बाद, विधि "denodeify" को कहा जा सकता है जो किसी भी फ़ंक्शन को एक फ़ंक्शन बनने का कारण देगा जो एक वादा लौटाता है।
नीचे दिए गए उदाहरण में, हम "Add" नामक एक साधारण फ़ंक्शन बनाएंगे जो 2 नंबर जोड़ देगा। हम इस फ़ंक्शन को एक वादा वापस करने के लिए एक फ़ंक्शन में बदल देंगे।
एक बार ऐसा हो जाने के बाद, हम कंसोल में एक संदेश प्रदर्शित करने के लिए ऐड फंक्शन द्वारा दिए गए वादे का उपयोग करेंगे।
एक वादा वापस करने के लिए हमारे कस्टम फ़ंक्शन बनाने के लिए निम्न चरणों का पालन करें।
चरण 1) एनपीएम मॉड्यूल स्थापित करना
Node JS एप्लिकेशन के भीतर से 'q' का उपयोग करने के लिए, 'q' मॉड्यूल की आवश्यकता होती है। 'Q' मॉड्यूल को स्थापित करने के लिए, नीचे कमांड चलाएँ
npm स्थापित q
चरण 2) निम्नलिखित कोड को परिभाषित करें जिसका उपयोग कस्टम वादा बनाने के लिए किया जाएगा।
कोड स्पष्टीकरण: -
- पहला बिट आवश्यकता कीवर्ड का उपयोग करके 'q' लाइब्रेरी को शामिल करने के लिए है। इस लाइब्रेरी का उपयोग करके, हम कॉलबैक वापस करने के लिए किसी भी फ़ंक्शन को परिभाषित करने में सक्षम होंगे।
- हम ऐड नामक एक फंक्शन बना रहे हैं जो वेरिएबल a और b में परिभाषित 2 नंबर जोड़ देगा। इन मूल्यों का योग चर c में संग्रहीत किया जाएगा।
- फिर हम denodeify के लिए q लाइब्रेरी का उपयोग कर रहे हैं (विधि किसी फ़ंक्शन को किसी फ़ंक्शन में परिवर्तित करने के लिए उपयोग किया जाता है जो एक वादा लौटाएगा) हमारा ऐड फ़ंक्शन या अन्यथा हमारे ऐड फ़ंक्शन को एक फ़ंक्शन में परिवर्तित करता है जो एक वादा लौटाता है।
- अब हम अपने "ऐड" फ़ंक्शन को कॉल करते हैं और ऐड फंक्शन को डीनोडिफाई करने से पहले किए गए कदम के कारण हम वापसी का वादा कर पाते हैं।
- 'तत्कालीन' कीवर्ड का उपयोग यह निर्दिष्ट करता है कि यदि फ़ंक्शन को सफलतापूर्वक निष्पादित किया जाता है, तो कंसोल में "स्ट्रिंग फ़ंक्शन पूरा हुआ" प्रदर्शित करें।
जब उपरोक्त कोड चलाया जाता है, तो आउटपुट "अतिरिक्त फ़ंक्शन पूरा" कंसोल में प्रदर्शित किया जाएगा। नीचे दिखाए अनुसार।
सारांश
- Node.js में कॉलबैक फ़ंक्शन का उपयोग करने से इसके नुकसान होते हैं। कभी-कभी विकास की प्रक्रिया के दौरान, कॉलबैक फ़ंक्शन का नेस्टेड उपयोग कोड को गड़बड़ कर सकता है और बनाए रखने में मुश्किल हो सकता है।
- नेस्टेड कॉलबैक फ़ंक्शंस के अधिकांश मुद्दों को नोड.जेएस में वादों और जनरेटर के उपयोग के साथ कम किया जा सकता है
- एक वादा एक अतुल्यकालिक फ़ंक्शन द्वारा लौटाया गया मान है जो अतुल्यकालिक फ़ंक्शन द्वारा किए गए प्रसंस्करण के पूरा होने का संकेत देता है।
- जब एक अतुल्यकालिक फ़ंक्शन को किसी अन्य अतुल्यकालिक फ़ंक्शन के बाद कॉल करने की आवश्यकता होती है, तो कोड को बेहतर और आसान बनाने के लिए एक-दूसरे के भीतर वादों को घोंसला बनाया जा सकता है।