यह एक नए साल की शुरुआत है, और जबकि बहुत से लोग अधिक सक्रिय होने का वादा कर रहे हैं, मैं आपको दिखाने जा रहा हूं कि कैसे को और अधिक आलसी बनाया जाए... एस, वह है। Promise जावास्क्रिप्ट Promise यह एक पल में और अधिक समझ में आएगा। https://www.youtube.com/watch?v=qj7diPVWTqY?embedable=true सबसे पहले, आइए बुनियादी उदाहरण देखें। यहां, मेरे पास नींद नामक एक फ़ंक्शन है जो मिलीसेकंड और एक मान में समय लेता है। यह एक वादा देता है जो मिलीसेकंड की संख्या के लिए एक निष्पादित करेगा जिसे हमें इंतजार करना चाहिए; तब वादा मूल्य के साथ हल हो जाता है। Promise setTimeout /** * @template ValueType * @param {number} ms * @param {ValueType} value * @returns {Promise<ValueType>} */ function sleep(ms, value) { return new Promise((resolve) => { setTimeout(() => resolve(value), ms); }); } यह इस तरह काम करता है: हम और के तर्कों के साथ फंक्शन का इंतजार कर सकते हैं, और एक सेकंड के बाद, 'यॉन एंड स्ट्रेच' स्ट्रिंग को लॉग करेगा। 1000 'Yawn & stretch' sleep console इसमें कुछ भी खास नहीं है। यह शायद वैसा ही व्यवहार करता है जैसा आप उम्मीद करेंगे, लेकिन यह थोड़ा अजीब हो जाता है अगर हम इसे बाद में करने के लिए एक चर के रूप में संग्रहीत करते हैं, बजाय इसके कि तुरंत लौटाए गए का करें। await Promise await const nap = sleep(1000, 'Yawn & stretch') अब, मान लें कि हम कोई अन्य कार्य करते हैं जिसमें समय लगता है (जैसे अगला उदाहरण टाइप करना), और फिर चर करें। nap await हल करने से पहले आप एक सेकंड की देरी की उम्मीद कर सकते हैं, लेकिन वास्तव में, यह तुरंत हल हो जाता है। जब भी आप एक बनाते हैं, तो आप इसके लिए जिम्मेदार किसी भी अतुल्यकालिक कार्यक्षमता को तुरंत चालू कर देते हैं। Promise हमारे उदाहरण में, जिस क्षण हम वेरिएबल को परिभाषित करते हैं, बन जाता है जो को निष्पादित करता है। क्योंकि मैं धीमा टाइपर हूं, जब तक हम इसका करेंगे, तब तक हल हो जाएगा। nap Promise setTimeout await Promise दूसरे शब्दों में, एस उत्सुक हैं। वे आपकी प्रतीक्षा करने के लिए आपकी नहीं करते हैं। Promise await कुछ मामलों में, यह अच्छी बात है। अन्य मामलों में, यह अनावश्यक संसाधन उपयोग को जन्म दे सकता है। उन परिदृश्यों के लिए, आप ऐसा कुछ चाहते हैं जो जैसा दिखता हो, लेकिन उपयोग करता हो जरूरत पड़ने पर केवल तत्काल करने के लिए। Promise आलसी मूल्यांकन इससे पहले कि हम आगे बढ़ें, मैं आपको कुछ दिलचस्प दिखाना चाहता हूँ। केवल ऐसी चीजें नहीं हैं जिन्हें जावास्क्रिप्ट में किया जा सकता है। यदि हम एक विधि के साथ एक सादा बनाते हैं, तो हम वास्तव में किसी भी की तरह ही उस वस्तु कर सकते हैं। Promise await .then() Object Promise await यह एक तरह से अजीब है, लेकिन यह हमें अलग-अलग ऑब्जेक्ट बनाने की भी अनुमति देता है जो की तरह हैं, लेकिन हैं नहीं। इन वस्तुओं को कभी-कभी "कहा जाता है" "। Promise दिखते फिर योग्य इसे ध्यान में रखते हुए, आइए एक नया बनाएं कहा जाता है जो बिल्ट-इन कंस्ट्रक्टर का विस्तार करता है। विस्तार वादा सख्ती से जरूरी नहीं है, लेकिन यह जैसी चीजों का उपयोग करके इसे के समान दिखाई देता है। कक्षा LazyPromise Promise instanceof Promise class LazyPromise extends Promise { /** @param {ConstructorParameters<PromiseConstructor>[0]} executor */ constructor(executor) { super(executor); if (typeof executor !== 'function') { throw new TypeError(`LazyPromise executor is not a function`); } this._executor = executor; } then() { this.promise = this.promise || new Promise(this._executor); return this.promise.then.apply(this.promise, arguments); } } ध्यान केंद्रित करने वाला हिस्सा विधि है। यह वास्तविक बनाने से पहले विधि निष्पादित होने तक प्रतीक्षा करने के लिए मानक के डिफ़ॉल्ट व्यवहार को हाइजैक करता है। then() Promise .then() Promise जब तक आप वास्तव में इसके लिए कॉल नहीं करते हैं, तब तक एसिंक्रोनस कार्यक्षमता को तुरंत चालू करने से बचा जाता है। और यह काम करता है कि क्या आप स्पष्ट रूप से को कॉल करते हैं या का उपयोग करते हैं। .then() await अब देखते हैं कि क्या होता है यदि हम मूल फंक्शन में के साथ को बदल दें। एक बार फिर, हम परिणाम को एक वेरिएबल को असाइन करेंगे। sleep LazyPromise Promise nap function sleep(ms, value) { return new LazyPromise((resolve) => { setTimeout(() => resolve(value), ms); }); } const nap = sleep(1000, 'Yawn & stretch') फिर हम अपना समय लाइन को टाइप करने और उसे निष्पादित करने में लगाते हैं। await nap इस बार, हम पूरा होने से पहले एक सेकंड की देरी देखते हैं, भले ही वेरिएबल बनाए जाने के बाद कितना समय बीत चुका हो। Promise (ध्यान दें कि यह कार्यान्वयन केवल एक बार नया बनाता है और इसे बाद की कॉल में संदर्भित करता है। इसलिए यदि हम इसे फिर से करते हैं, तो यह किसी भी सामान्य की तरह तुरंत हल हो जाएगा) Promise await Promise बेशक, यह एक मामूली उदाहरण है कि आप शायद उत्पादन कोड में नहीं पाएंगे, लेकिन ऐसी कई परियोजनाएं हैं जो आलसी-मूल्यांकन किए गए -जैसी वस्तुओं का उपयोग करती हैं। संभवतः सबसे आम उदाहरण डेटाबेस s और क्वेरी बिल्डर्स जैसे हैं या . Promise ORM क्नेक्स.जेएस प्रिस्मा नीचे छद्म कोड पर विचार करें। यह इनमें से कुछ क्वेरी बिल्डरों से प्रेरित है: const query = db('user') .select('name') .limit(10) const users = await query हम एक डेटाबेस क्वेरी बनाते हैं जो तालिका में जाती है और पहली दस प्रविष्टियों का चयन करती है और उनके नाम लौटाती है। सिद्धांत रूप में, यह एक नियमित के साथ ठीक काम करेगा। "user" Promise लेकिन क्या होगा अगर हम क्वेरी स्ट्रिंग पैरामीटर जैसी कुछ शर्तों के आधार पर क्वेरी को संशोधित करना चाहते हैं? का इंतजार करने से पहले क्वेरी को संशोधित करना जारी रखना अच्छा होगा। Promise const query = db('user') .select('name') .limit(10) if (orderBy) { query.orderBy(orderBy) } if (limit) { query.limit(limit) } if (id) { query.where({ id: id }) } const users = await query यदि मूल डेटाबेस क्वेरी एक मानक था, तो जैसे ही हमने वेरिएबल असाइन किया, यह उत्सुकता से क्वेरी को तुरंत चालू कर देगा, और हम इसे बाद में संशोधित नहीं कर पाएंगे। Promise आलसी मूल्यांकन के साथ, हम इस तरह का कोड लिख सकते हैं जिसका पालन करना आसान है, डेवलपर अनुभव में सुधार करता है, और केवल एक बार क्वेरी को निष्पादित करता है जब हमें इसकी आवश्यकता होती है। यह एक उदाहरण है जहां आलसी मूल्यांकन बहुत अच्छा है। यह HTTP अनुरोधों को बनाने, संशोधित करने और ऑर्केस्ट्रेट करने जैसी चीज़ों के लिए भी उपयोगी हो सकता है। लेज़ी सही उपयोग के मामलों के लिए बहुत अच्छे हैं, लेकिन यह कहना नहीं है कि उन्हें हर को बदलना चाहिए। कुछ मामलों में, उत्सुकता से तत्काल करना और जितनी जल्दी हो सके प्रतिक्रिया तैयार करना फायदेमंद होता है। Promise Promise यह उन "यह निर्भर करता है" परिदृश्यों में से एक है। लेकिन अगली बार जब कोई आपसे कोई करने के लिए कहे, तो इसके बारे में आलसी होने पर विचार करें। Promise पढ़ने के लिए आपको बहुत बहुत शुक्रिया। अगर आपको यह लेख पसंद आया हो तो प्लीज . यह मेरा समर्थन करने के सर्वोत्तम तरीकों में से एक है। आप भी कर सकते हैं या यदि आप जानना चाहते हैं कि नए लेख कब प्रकाशित होते हैं। इसे शेयर करें मेरे न्यूज़लैटर के लिए साइन अप करें मुझे ट्वीटर पर अनुगमन कीजीए मूल रूप से पर प्रकाशित किया गया austingil.com .