Node.js प्रॉमिस ट्यूटोरियल

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

वादे क्या हैं?

इससे पहले कि हम वादे शुरू करें, आइए सबसे पहले Node.js में "कॉलबैक" फ़ंक्शन को फिर से देखें। हमने पिछले अध्यायों में इन कॉलबैक फ़ंक्शन को बहुत देखा है, इसलिए आइए जल्दी से उनमें से एक पर नज़र डालें।

नीचे दिया गया उदाहरण एक कोड स्निपेट दिखाता है, जिसका उपयोग किसी से कनेक्ट करने के लिए किया जाता है MongoDB डेटाबेस पर जाएँ और डेटाबेस में मौजूद किसी एक रिकॉर्ड पर अद्यतन ऑपरेशन करें।

Node.js वादा

  1. उपरोक्त कोड में, फ़ंक्शन (err,db) का भाग एक अनाम या कॉलबैक फ़ंक्शन की घोषणा के रूप में जाना जाता है। जब MongoClient एक कनेक्शन बनाता है MongoDB डेटाबेस, कनेक्शन ऑपरेशन पूरा होने के बाद यह कॉलबैक फ़ंक्शन पर वापस आ जाएगा। तो एक तरह से, कनेक्शन ऑपरेशन पृष्ठभूमि में होते हैं, और जब यह पूरा हो जाता है, तो यह हमारे कॉलबैक फ़ंक्शन को कॉल करता है। याद रखें कि यह Node.js के मुख्य बिंदुओं में से एक है जो कई ऑपरेशनों को एक साथ होने देता है और इस प्रकार किसी भी उपयोगकर्ता को ऑपरेशन करने से नहीं रोकता है।
  2. दूसरा कोड ब्लॉक वह है जो तब निष्पादित होता है जब कॉलबैक फ़ंक्शन वास्तव में कॉल किया जाता है। कॉलबैक फ़ंक्शन हमारे में केवल एक रिकॉर्ड को अपडेट करता है MongoDB डेटाबेस।

तो फिर वादा क्या है? खैर, वादा Node.js में कॉलबैक फ़ंक्शन के लिए सिर्फ़ एक संवर्द्धन है। विकास जीवनचक्र के दौरान, ऐसा कोई उदाहरण हो सकता है जहाँ आपको कई कॉलबैक फ़ंक्शन को एक साथ जोड़ने की ज़रूरत होगी। यह एक निश्चित समय पर गड़बड़ और बनाए रखना मुश्किल हो सकता है। संक्षेप में, वादा कॉलबैक के लिए एक संवर्द्धन है जो इन समस्याओं को कम करने की ओर देखता है।

वादे का मूल वाक्यविन्यास नीचे दिखाया गया है;

var promise = doSomethingAync()
promise.then(onFulfilled, onRejected)
  • “doSomethingAync” कोई भी कॉलबैक या एसिंक्रोनस फ़ंक्शन है जो किसी प्रकार की प्रोसेसिंग करता है।
  • इस बार, कॉलबैक को परिभाषित करते समय, एक मान लौटाया जाता है जिसे "वादा" कहा जाता है।
  • जब कोई वादा वापस किया जाता है, तो उसके 2 आउटपुट हो सकते हैं। इसे 'then क्लॉज' द्वारा परिभाषित किया जाता है। या तो ऑपरेशन सफल हो सकता है जिसे 'onFulfilled' पैरामीटर द्वारा दर्शाया जाता है। या इसमें एक त्रुटि हो सकती है जिसे 'onRejected' पैरामीटर द्वारा दर्शाया जाता है।

नोट: इसलिए वादे का मुख्य पहलू रिटर्न वैल्यू है। Node.js में सामान्य कॉलबैक के साथ काम करते समय रिटर्न वैल्यू की कोई अवधारणा नहीं होती है। रिटर्न वैल्यू की वजह से, हमारे पास इस बात पर अधिक नियंत्रण होता है कि कॉलबैक फ़ंक्शन को कैसे परिभाषित किया जा सकता है।

अगले विषय में, हम वादों का एक उदाहरण देखेंगे और देखेंगे कि वे कॉलबैक से कैसे लाभान्वित होते हैं।

वादों पर वापस लौटना

अब आइए एक उदाहरण देखें कि हम Node.js एप्लिकेशन के भीतर से "वादों" का उपयोग कैसे कर सकते हैं। Node.js एप्लिकेशन में वादों का उपयोग करने के लिए, 'वादा' मॉड्यूल को पहले डाउनलोड और इंस्टॉल किया जाना चाहिए।

फिर हम अपने कोड को संशोधित करेंगे जैसा कि नीचे दिखाया गया है, जो वादों का उपयोग करके 'Employee' संग्रह में Employeename को अद्यतन करता है।

चरण 1) एनपीएम मॉड्यूल स्थापित करना

Node JS एप्लीकेशन के अंदर Promises का उपयोग करने के लिए, promise मॉड्यूल की आवश्यकता होती है। promise मॉड्यूल को इंस्टॉल करने के लिए, नीचे दिया गया कमांड चलाएँ

एनपीएम इंस्टॉल वादा

चरण 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"
            }
        });
    }); 

कोड स्पष्टीकरण:-

  1. पहला भाग 'प्रॉमिस' मॉड्यूल को शामिल करना है जो हमें अपने कोड में प्रॉमिस कार्यक्षमता का उपयोग करने की अनुमति देगा।
  2. अब हम अपने MongoClient.connect फ़ंक्शन में 'then' फ़ंक्शन जोड़ सकते हैं। तो यह क्या करता है कि जब डेटाबेस से कनेक्शन स्थापित हो जाता है, तो हमें उसके बाद परिभाषित कोड स्निपेट को निष्पादित करने की आवश्यकता होती है।
  3. अंत में, हम अपना कोड स्निपेट परिभाषित करते हैं जो कर्मचारी के EmployeeName को “मार्टिन” नाम से “मोहन” में अपडेट करने का काम करता है।

नोट: -

यदि आप अब अपनी वेबसाइट की सामग्री की जांच करते हैं, MongoDB डेटाबेस में, आप पाएंगे कि यदि “मार्टिन” के कर्मचारी नाम वाला कोई रिकॉर्ड मौजूद है, तो इसे “मोहन” में अपडेट कर दिया जाएगा।

यह जांचने के लिए कि डाटाबेस में डाटा सही तरीके से डाला गया है, आपको निम्नलिखित कमांड निष्पादित करने की आवश्यकता है MongoDB

  1. कर्मचारीDB का उपयोग करें
  2. db.Employee.find({EmployeeName :मोहन})

पहला कथन यह सुनिश्चित करता है कि आप EmployeeDb डेटाबेस से जुड़े हुए हैं। दूसरा कथन उस रिकॉर्ड की खोज करता है जिसमें कर्मचारी का नाम “मोहन” है।

नेस्टेड वादों से निपटना

वादों को परिभाषित करते समय, यह ध्यान रखना आवश्यक है कि “then” विधि स्वयं एक वादा लौटाती है। इसलिए एक अर्थ में, वादे एक दूसरे से नेस्टेड या चेन किए जा सकते हैं।

नीचे दिए गए उदाहरण में, हम 2 कॉलबैक फ़ंक्शन को परिभाषित करने के लिए चेनिंग का उपयोग करते हैं, जो दोनों एक रिकॉर्ड को सम्मिलित करते हैं MongoDB डेटाबेस।

(नोट: चेनिंग एक अवधारणा है जिसका उपयोग विधियों के निष्पादन को एक दूसरे से जोड़ने के लिए किया जाता है। मान लीजिए कि आपके एप्लिकेशन में 'methodA' और 'methodB' नामक 2 विधियाँ हैं। और तर्क ऐसा था कि 'methodB' को 'methodA' के बाद बुलाया जाना चाहिए, तो आप निष्पादन को इस तरह से चेन करेंगे कि 'methodB' को 'methodA' के ठीक बाद बुलाया जाए।)

इस उदाहरण में ध्यान देने योग्य मुख्य बात यह है कि नेस्टेड प्रॉमिस का उपयोग करने से कोड अधिक स्वच्छ, पठनीय और रखरखाव योग्य हो जाता है।

नेस्टेड प्रॉमिस से निपटना

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"
        })
    })
});

कोड स्पष्टीकरण:-

  1. अब हम 2 “then” क्लॉज परिभाषित कर रहे हैं जो एक के बाद एक निष्पादित होते हैं। पहले then क्लॉज में, हम 'db' पैरामीटर पास कर रहे हैं जिसमें हमारा डेटाबेस कनेक्शन शामिल है। फिर हम 'db' कनेक्शन की कलेक्शन प्रॉपर्टी का उपयोग करके 'Employee' कलेक्शन में रिकॉर्ड डाल रहे हैं। 'insertOne' विधि का उपयोग कर्मचारी कलेक्शन में वास्तविक दस्तावेज़ डालने के लिए किया जाता है।
  2. फिर हम 2 का उपयोग कर रहे हैंnd फिर डेटाबेस में एक और रिकॉर्ड डालने के लिए भी खंड।

यदि आप अब अपनी वेबसाइट की सामग्री की जांच करते हैं, MongoDB डेटाबेस में, आपको 2 रिकॉर्ड सम्मिलित मिलेंगे MongoDB डेटाबेस।

कस्टम वादा बनाना

'q' नामक नोड मॉड्यूल का उपयोग करके एक कस्टम वादा बनाया जा सकता है। नोड पैकेज मैनेजर का उपयोग करके 'q' लाइब्रेरी को डाउनलोड और इंस्टॉल किया जाना चाहिए। 'q' लाइब्रेरी का उपयोग करने के बाद, "denodeify" विधि को कॉल किया जा सकता है, जिससे कोई भी फ़ंक्शन एक ऐसा फ़ंक्शन बन जाएगा जो वादा लौटाता है।

नीचे दिए गए उदाहरण में, हम “Add” नामक एक सरल फ़ंक्शन बनाएंगे जो 2 संख्याओं को जोड़ेगा। हम इस फ़ंक्शन को एक वादा वापस करने वाले फ़ंक्शन में बदल देंगे।

एक बार ऐसा हो जाने पर, हम कंसोल.लॉग में संदेश प्रदर्शित करने के लिए Add फ़ंक्शन द्वारा लौटाए गए वादे का उपयोग करेंगे।

आइये, वादा वापस करने के लिए अपना कस्टम फ़ंक्शन बनाने हेतु नीचे दिए गए चरणों का पालन करें।

चरण 1) एनपीएम मॉड्यूल स्थापित करना

Node JS एप्लीकेशन के अंदर 'q' का उपयोग करने के लिए, 'q' मॉड्यूल की आवश्यकता होती है। 'q' मॉड्यूल को इंस्टॉल करने के लिए, नीचे दिया गया कमांड चलाएँ

एनपीएम इंस्टॉल क्यू

चरण 2) निम्नलिखित कोड को परिभाषित करें जिसका उपयोग कस्टम वादा बनाने के लिए किया जाएगा।

कस्टम वादा बनाना

कोड स्पष्टीकरण:-

  1. पहला काम require कीवर्ड का उपयोग करके 'q' लाइब्रेरी को शामिल करना है। इस लाइब्रेरी का उपयोग करके, हम कॉलबैक लौटाने के लिए कोई भी फ़ंक्शन परिभाषित कर पाएँगे।
  2. हम Add नामक एक फ़ंक्शन बना रहे हैं जो चर a और b में परिभाषित 2 संख्याओं को जोड़ेगा। इन मानों का योग चर c में संग्रहीत किया जाएगा।
  3. फिर हम अपने ऐड फ़ंक्शन को डीनोडीफाई करने के लिए q लाइब्रेरी का उपयोग कर रहे हैं (किसी फ़ंक्शन को ऐसे फ़ंक्शन में परिवर्तित करने के लिए उपयोग की जाने वाली विधि जो एक वादा लौटाएगी) या अन्यथा हमारे ऐड फ़ंक्शन को एक ऐसे फ़ंक्शन में परिवर्तित करें जो एक वादा लौटाता है।
  4. अब हम अपने "Add" फ़ंक्शन को कॉल करते हैं और रिटर्न प्रॉमिस वैल्यू प्राप्त करने में सक्षम हैं, क्योंकि हमने पहले Add फ़ंक्शन को डीनोडीफाई करने का चरण पूरा किया था।
  5. 'then' कीवर्ड का उपयोग यह निर्दिष्ट करने के लिए किया जाता है कि यदि फ़ंक्शन सफलतापूर्वक निष्पादित होता है तो कंसोल.लॉग में "अतिरिक्त फ़ंक्शन पूर्ण हुआ" स्ट्रिंग प्रदर्शित करें।

जब उपरोक्त कोड चलाया जाता है, तो आउटपुट “एडिशन फ़ंक्शन पूरा हुआ” कंसोल.लॉग में प्रदर्शित किया जाएगा जैसा कि नीचे दिखाया गया है।

कस्टम वादा बनाना

सारांश

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