Node.js जेनरेटर & कॉलबैक से तुलना करें

विषय - सूची:

Anonim

इस ट्यूटोरियल में, हम जेनरेटर और कॉलबैक के साथ उनके अंतर के बारे में जानने जा रहे हैं

जनरेटर क्या हैं?

जेनरेटर हाल के दिनों में Node.js में काफी प्रसिद्ध हो गए हैं और शायद इसीलिए वे ऐसा करने में सक्षम हैं।

  • जनरेटर फ़ंक्शन निष्पादन होते हैं जिन्हें बाद के बिंदु पर निलंबित और फिर से शुरू किया जा सकता है।
  • 'आलसी निष्पादन ’जैसी अवधारणाओं को अंजाम देते समय जनरेटर उपयोगी होते हैं। इसका मूल रूप से अर्थ यह है कि वसीयत पर अमल और फिर से शुरू करने से हम मूल्यों को तभी खींच सकते हैं जब हमें जरूरत हो।

जनरेटर के नीचे 2 मुख्य विधियाँ हैं

  1. यील्ड विधि - उपज विधि को फ़ंक्शन के निष्पादन को उस विशिष्ट लाइन पर रोकना कहा जाता है जहाँ उपज विधि को कहा जाता है।
  2. अगला तरीका - इस पद्धति को एक फ़ंक्शन के निष्पादन को फिर से शुरू करने के लिए मुख्य एप्लिकेशन से बुलाया जाता है जिसमें उपज विधि होती है। फ़ंक्शन का निष्पादन अगली उपज विधि या विधि के अंत तक जारी रहेगा।

आइए एक उदाहरण देखें कि जनरेटर का उपयोग कैसे किया जा सकता है।

हमारे उदाहरण में, हमारे पास एक सरल ऐड फ़ंक्शन होने वाला है जो 2 नंबर जोड़ देगा, लेकिन हम विभिन्न बिंदुओं पर विधि निष्पादन को रोकते रहेंगे ताकि यह दिखाया जा सके कि जनरेटर का उपयोग कैसे किया जा सकता है।

function* Add(x) {yield x + 1;var y = yield(null);y = 6return x + y;}var gen = Add(5);gen.next();gen.next();

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

  1. पहला कदम हमारे जनरेटर "फ़ंक्शन" को परिभाषित करना है। ध्यान दें कि यह फ़ंक्शन कीवर्ड में "*" जोड़कर किया गया है। फिर हम Add नामक एक फंक्शन को परिभाषित कर रहे हैं जो x का पैरामीटर लेता है।
  2. उपज कीवर्ड जनरेटर के लिए एक विशिष्ट है। यह कुछ भी के बीच में एक समारोह को रोकने के लिए एक शक्तिशाली निर्माण करता है। इसलिए यहां, फ़ंक्शन निष्पादन तब तक रुका रहेगा जब तक हम अगले () फ़ंक्शन को लागू नहीं करते हैं, जो कि चरण 4 में किया जाएगा। इस बिंदु पर, x का मान 6 हो जाएगा और फ़ंक्शन का निष्पादन रोक दिया जाएगा।
  3. यह वह जगह है जहां हम पहले जनरेटर फ़ंक्शन को कॉल करते हैं और हमारे ऐड फ़ंक्शन में 5 का मान भेजते हैं। यह मान हमारे ऐड फ़ंक्शन के x पैरामीटर में प्रतिस्थापित किया जाएगा।
  4. एक बार जब हम अगला () फ़ंक्शन कहते हैं, तो ऐड () फ़ंक्शन निष्पादन को फिर से शुरू करेगा। जब अगला विवरण var y = यील्ड (नल) निष्पादित किया जाएगा, तो Add () फ़ंक्शन फिर से निष्पादित करना बंद कर देगा।
  5. अब अगले () फ़ंक्शन को फिर से कॉल करने के बाद, अगले स्टेटमेंट चलेंगे, और x = 5 और y = 6 का संयुक्त मूल्य जोड़ा जाएगा और वापस आ जाएगा।

कॉलबैक बनाम जनरेटर

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

यह वह जगह है जहाँ जनरेटर उपयोगी हैं। इसका सबसे सामान्य उदाहरण टाइमर कार्यों को बनाते समय है।

आइए नीचे दिए गए उदाहरण देखें कि कॉलबैक पर जनरेटर कैसे उपयोगी साबित हो सकते हैं।

हमारा उदाहरण सिर्फ एक साधारण समय विलंब फ़ंक्शन बनाएगा। फिर हम 1000, 2000 और 3000 एमएस की देरी को शामिल करते हुए इस फ़ंक्शन को कॉल करना चाहेंगे।

चरण 1) आवश्यक समय विलंब कोड के साथ हमारे कॉलबैक फ़ंक्शन को परिभाषित करें।

function Timedelay(ptime, callback) {setTimeout(function() {callback("Pausing for " + ptime);}, time);}

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

  1. यहाँ हम एक पैरामीटर बना रहे हैं जिसका नाम Timedelay है जिसका पैरामीटर ptime है। यह आवश्यक समय लेगा जिसे हम अपने आवेदन में पेश करना चाहते हैं।
  2. अगला कदम सिर्फ एक संदेश बनाना है, जो उपयोगकर्ता को यह कहते हुए प्रदर्शित किया जाएगा कि इन कई मिलीसेकंड के लिए एप्लिकेशन को रोक दिया जाएगा।

चरण 2) अब कोड को देखें यदि हम कॉलबैक को शामिल कर रहे थे। मान लीजिए कि हम 1000, 2000 और 3000 मिलीसेकंड के मूल्य के आधार पर कॉलबैक को शामिल करना चाहते थे, नीचे दिए गए कोड से पता चलता है कि हमें कॉलबैक का उपयोग करके इनको कैसे लागू करना होगा।

Timedelay(1000, function(message) {console.log(msg);Timedelay(2000, function(message) {console.log(msg);Timedelay(3000, function(message) {console.log(msg);})})})

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

  1. हम Timedelay को मूल्य के रूप में 1000 के साथ कॉलबैक के रूप में बुला रहे हैं।
  2. आगे हम मूल्य के रूप में 2000 के साथ Timedelay फ़ंक्शन को फिर से कॉल करना चाहते हैं।
  3. अंत में, हम मूल्य के रूप में 3000 के साथ Timedelay फ़ंक्शन को फिर से कॉल करना चाहते हैं।

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

चरण 3) अब देखते हैं कि जनरेटर का उपयोग करके समान कोड कैसे लागू किया जाए। नीचे दिए गए कोड से अब आप देख सकते हैं कि जेनरेटरों का उपयोग करके Timedelay फ़ंक्शन को लागू करना कितना सरल हो गया है।

function* Messages() {console,log(yield(Timedelay(1000, function(){})));console,log(yield(Timedelay(2000, function(){})));console,log(yield(Timedelay(3000, function(){})));}

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

  1. हम पहले एक जनरेटर फ़ंक्शन को परिभाषित कर रहे हैं जिसका उपयोग हमारे Timedelay फ़ंक्शन को कॉल करने के लिए किया जाएगा।
  2. हम Tieldelay फ़ंक्शन के साथ यील्ड फ़ंक्शन को पैरामीटर मान के रूप में 1000 के साथ बुला रहे हैं।
  3. इसके बाद हम पैरामीटर मान के रूप में 2000 के साथ Timedelay फ़ंक्शन के साथ यील्ड फ़ंक्शन को कॉल कर रहे हैं।
  4. अंत में, हम पैरामीटर मान के रूप में 3000 के साथ Timedelay फ़ंक्शन के साथ यील्ड फ़ंक्शन को कॉल कर रहे हैं।

सारांश

जेनरेटरों का उपयोग नेस्टेड कॉलबैक के साथ समस्याओं को कम करने के लिए भी किया जा सकता है और कॉलबैक नरक के रूप में जाना जाता है जिसे हटाने में सहायता करता है। किसी फ़ंक्शन के प्रसंस्करण को रोकने के लिए जनरेटर का उपयोग किया जाता है। यह एसिंक्रोनस फ़ंक्शन में 'उपज' विधि के उपयोग से पूरा होता है।