इस लेख की सामग्री जावास्क्रिप्ट शुरुआती लोगों के लिए बहुत उपयुक्त है। इसे सरल और आसानी से समझ में आने वाली भाषा में वर्णित किया जाएगा, इसलिए आपको इसे न समझ पाने के बारे में चिंता करने की ज़रूरत नहीं है।
आधुनिक जावास्क्रिप्ट भाषा सीखते समय वादा एक अनिवार्य ज्ञान बिंदु है। इसे पढ़ते समय कई लोग भ्रमित महसूस करते हैं। मुख्य कारण को एक वाक्य में संक्षेपित किया जा सकता है:
कोड अब ऊपर से नीचे तक निष्पादित नहीं होता है।
आम तौर पर, हम जो कोड लिखते हैं वह क्रमिक रूप से निष्पादित होता है, उदाहरण के लिए, हम एक कोड लिखते हैं जो 1 से 3 तक गिना जाता है।
console.log(1) console.log(2) console.log(3)
हमारे ब्राउज़र का कंसोल खोलने के लिए F12 दबाएं, उपरोक्त कोड को उसमें कॉपी करें, एंटर दबाएं, और आप देख सकते हैं कि 1 से 3 नंबर क्रम से प्रिंट हो गए हैं।
1 2 3
अब, यदि हमारी आवश्यकता है कि कोड का क्रम बदला नहीं जा सकता है, लेकिन अंतिम प्रिंटआउट का क्रम कोड के क्रम से स्वतंत्र होना चाहिए, तो क्या हम ऐसा कर सकते हैं?
आइए कल्पना करें कि यदि 1, 2, और 3 को क्रमशः तीन लोगों द्वारा मुद्रित किया जाता है, तो यह बहुत सरल होगा। हमें बस उन्हें एक ही समय में संख्याओं को प्रिंट करने का कार्य बताना होगा, और प्रिंटआउट का क्रम केवल कार्यों के निष्पादन समय से संबंधित होगा।
तो, हम तीन लोगों को मुद्रण कार्य कैसे सौंप सकते हैं? यहीं पर प्रॉमिस का उपयोग किया जाता है। एक नया प्रॉमिस ऑब्जेक्ट बनाकर, हम कोड के एक सेक्शन को वर्तमान "प्रक्रिया" पर निष्पादित करने के बजाय एक नई "प्रक्रिया" को निर्दिष्ट कर सकते हैं। ध्यान दें कि यहां "प्रक्रिया" उस ऑपरेटिंग सिस्टम प्रक्रिया के समान नहीं है जिसके बारे में हम अक्सर बात करते हैं, बल्कि यह सिर्फ एक अमूर्त अवधारणा है, जो एक आभासी इकाई का प्रतिनिधित्व करती है जो अनुक्रम में कोड निष्पादित करती है।
जैसा कि हमने अभी कहा, वादा करें कि इसे एक नई "प्रक्रिया" के रूप में माना जा सकता है, इसलिए यदि हम चाहते हैं कि यह किसी भी कोड को निष्पादित करे, तो हम इसे एक फ़ंक्शन में लपेट सकते हैं और इसे दे सकते हैं। इस तरह, कोड तुरंत निष्पादित नहीं किया जाएगा।
प्रॉमिस हमें दो कार्य भी प्रदान करता है, एक है संकल्प और दूसरा है अस्वीकार, जिसे हम क्रमशः कार्य पूरा होने और विफल होने पर कॉल कर सकते हैं। इन दो कार्यों को प्रॉमिस के आंतरिक पैरामीटर के रूप में पास किया जाता है। तो, हम इसे इस तरह से असेंबल कर सकते हैं:
Promise( (resolve, _reject) => { setTimeout(() => { console.log(1) resolve() }, 300) } )
यहां हम समय लेने वाले कार्य को अनुकरण करने के लिए सेटटाइमआउट का उपयोग करते हैं। वास्तविक परिदृश्यों में, यह कार्य किसी फ़ाइल को पढ़ना, नेटवर्क इंटरफ़ेस का अनुरोध करना या उपयोगकर्ता इनपुट की प्रतीक्षा करना हो सकता है। जब कार्य पूरा हो जाता है, तो हम यह इंगित करने के लिए रिज़ोल्यूशन फ़ंक्शन को कॉल करते हैं कि कार्य पूरा हो गया है।
फिर, हम उसी विधि का पालन करते हैं, और वादा करते हैं कि जब हम अन्य दो को इकट्ठा करते हैं, तो हमें केवल उन्हें अलग-अलग प्रिंट नंबर और कार्य के लिए आवश्यक समय प्रदान करना होगा। अंत में, पूरा कोड इस प्रकार है, आप इसे कंसोल में कॉपी करके आज़मा सकते हैं।
Promise( (resolve, _reject) => { setTimeout(() => { console.log(1) resolve() }, 300) } ) new Promise( (resolve, _reject) => { setTimeout(() => { console.log(2) resolve() }, 200) } ) new Promise( (resolve, _reject) => { setTimeout(() => { console.log(3) resolve() }, 100) } )
अंत में, संख्याओं को मुद्रित करने का क्रम कार्यों के निष्पादन समय से संबंधित है:
3 2 1
समवर्ती प्रोग्रामिंग इस बारे में है कि सीमित संख्या में सीपीयू कोर पर एक साथ बड़ी संख्या में कार्यों के निष्पादन को कैसे अनुकरण किया जाए। जावास्क्रिप्ट में प्रॉमिस समवर्ती प्रोग्रामिंग का एक सुविधाजनक और तेज़ तरीका प्रदान करता है, साथ ही रिटर्न मान और त्रुटि मान को संभालने के लिए विशिष्टताओं का एक सेट भी प्रदान करता है। इस विशिष्टता को समझने और इससे परिचित होने के बाद, हम समवर्ती कार्यों को संभालने की दक्षता में काफी सुधार कर सकते हैं।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3