अगर आप अलग-अलग प्रोग्रामिंग भाषाओं से आने वाले इंजीनियर या डेवलपर हैं, तो आपने sleep()
नाम के एक नेटिव तरीके का इस्तेमाल किया होगा किसी विधि को क्रियान्वित करने से रोकना या रोकना। जावास्क्रिप्ट में ऐसी कोई मूल विधि नहीं है।
इस लेख में, हम दो अलग-अलग तरीकों के बारे में बात करेंगे जिनसे हम स्लीप फ़ंक्शन को अनुकरण करने के लिए जावास्क्रिप्ट का उपयोग कर सकते हैं:वादे और async/प्रतीक्षा फ़ंक्शन।
एसिंक्रोनस फ़ंक्शंस का परिचय
हमें पहले setTimeout()
का उल्लेख किए बिना जावास्क्रिप्ट में वादों या async/प्रतीक्षा कार्यों के बारे में बात नहीं करनी चाहिए विधि संक्षेप में। यह विधि बताएगी कि जावास्क्रिप्ट में वादों की आवश्यकता क्यों है।
जावास्क्रिप्ट सिंगल-थ्रेडेड है
जब हम कहते हैं कि जावास्क्रिप्ट एक सिंगल-थ्रेडेड भाषा है, तो हमारा मतलब है कि जावास्क्रिप्ट में केवल एक कॉल स्टैक और एक मेमोरी हीप है। उच्च स्तर पर, इसका मतलब है कि जावास्क्रिप्ट कोड को पढ़ता है, एक समय में एक पंक्ति, क्रम में, और अगली पंक्ति में जाने से पहले कोड के एक टुकड़े को निष्पादित करना चाहिए। यह जावास्क्रिप्ट को स्वभाव से तुल्यकालिक बनाता है। कभी-कभी, हमें अपने कोड को एसिंक्रोनस बनाने के लिए एक समाधान की आवश्यकता होती है।
सिंक्रोनस कोड बनाम एसिंक्रोनस कोड
इस उदाहरण पर एक नज़र डालें।
//synchronousconsole.log("यह पहले प्रिंट होगा")console.log("यह दूसरा प्रिंट करेगा")console.log("यह तीसरा प्रिंट करेगा");
बहुत सीधा है, है ना? प्रत्येक कंसोल.लॉग उत्तराधिकार में प्रिंट होगा क्योंकि जावास्क्रिप्ट उन्हें उत्तराधिकार में निष्पादित करता है।
मान लीजिए कि हम लाइन दो को लाइन तीन से पहले प्रिंट करना चाहते हैं? हम उस console.log
. को अनिवार्य रूप से कैसे प्रिंट कर सकते हैं? बारी के बिना? हम setTimeout()
. के साथ ऐसा कर सकते हैं :
//setTimeoutconsole.log("यह पहले प्रिंट होगा") setTimeout(() => {console.log("यह तीसरा प्रिंट करेगा")}, 1000); कंसोल.लॉग ("यह दूसरा प्रिंट करेगा");
setTimeout()
हमें थ्रेड को ब्लॉक किए बिना जावास्क्रिप्ट फ़ंक्शन निष्पादित करने की अनुमति देता है ताकि अन्य कोड चल सकें। पहला तर्क कॉलबैक फ़ंक्शन है जो एक निर्धारित समय (दूसरा तर्क) के बाद चलता है। दूसरा तर्क कई मिलीसेकंड में दर्शाया गया है।
81% प्रतिभागियों ने कहा कि बूटकैंप में भाग लेने के बाद उन्हें अपनी तकनीकी नौकरी की संभावनाओं के बारे में अधिक आत्मविश्वास महसूस हुआ। आज ही एक बूटकैंप से मिलान करें।
बूटकैंप शुरू करने से लेकर अपनी पहली नौकरी खोजने तक, औसत बूटकैंप ग्रेड ने करियर संक्रमण में छह महीने से भी कम समय बिताया।
यह setTimeout()
विधि नींद की विधि की नकल करती है जो अन्य भाषाओं में मूल है:
- जब JavaScript इंजन
setTimeout()
को निष्पादित करता है, तब पृष्ठभूमि में टाइमर सेट करना समारोह - अन्य कोड चलाना जारी रखें क्योंकि टाइमर अपनी उलटी गिनती करता है
setTimeout()
में कॉलबैक फ़ंक्शन निष्पादित करना जब टाइमर शून्य पर पहुंच जाता है।
यह समझना कि कैसे setTimeout()
काम यह समझने में सक्षम होने के लिए महत्वपूर्ण है कि वादे और एसिंक/प्रतीक्षा कार्य कैसे काम करते हैं। हम आगे वादों को कवर करेंगे।
वादे
वादा बनाना
वादे अतुल्यकालिक तर्क करने का एक तरीका है। प्रॉमिस कंस्ट्रक्टर एक कॉलबैक फ़ंक्शन लेता है जिसमें दो पैरामीटर होते हैं:हल करें और अस्वीकार करें। इस कॉलबैक फ़ंक्शन में तर्क होता है, जो एक बार समाप्त हो जाने पर, एक प्रतिक्रिया के साथ एक संकल्प या अस्वीकार फ़ंक्शन का आह्वान करेगा।
console.log("वादे से पहले") चलो वादा =नया वादा ((समाधान, अस्वीकार) => {letsolvedFlag =false;//यह सिर्फ एक झंडा है इसलिए हम जानबूझकर तर्क कंसोल का परीक्षण करने के लिए प्रतिक्रिया फेंक सकते हैं। लॉग ("प्रथम"); कंसोल.लॉग ("दूसरा") कंसोल.लॉग ("तीसरा") कंसोल.लॉग ("चौथा") हल किया गया फ़्लैग) {// यदि हल किया गया सत्य है तो संकल्प फ़ंक्शन को हल करें ("वादा हल किया गया") नई त्रुटि ("वादा विफल")); कंसोल.लॉग ("वादे के बाद"); }});
यहां कोड स्निपेट एक साधारण वादा प्रदर्शित करता है। वादे तीन राज्यों में हो सकते हैं:
लंबित - न तो हल किया गया और न ही खारिज किया गया - यह वादे की शुरुआती स्थिति है
समाधान - सफल निष्पादन
अस्वीकार - निष्पादन में त्रुटि
हल किए गए वादे और अस्वीकृत वादे के समाधान को प्रदर्शित करने के लिए ऊपर दिए गए कोड स्निपेट में हल किए गए फ़्लैग को सही से गलत पर टॉगल करने का प्रयास करें।
याद रखने वाली मुख्य बात यह है कि इस प्रॉमिस में एक फंक्शन होता है जो स्क्रिप्ट के निष्पादन को तब तक रोक देता है जब तक कि प्रॉमिस हल या अस्वीकार नहीं हो जाता। फिर स्क्रिप्ट फिर से शुरू होती है।
वादा प्रतिसाद का उपयोग करना
जब हम किसी वादे का उदाहरण शुरू करते हैं, तो हम then()
. का उपयोग करते हैं और catch()
उस तर्क को निर्धारित करने के लिए जिसे हम लौटाए गए वादे से प्रतिक्रिया प्राप्त करने के बाद उपयोग करना चाहते हैं। इसे एक कथन के रूप में रखा गया है - एक उच्च स्तरीय अवलोकन इस तरह दिखता है:
promise.then(func).catch(func);
उन कोष्ठकों में जो तत्कालीन और पकड़ विधियों का आह्वान करते हैं, एक अनाम फ़ंक्शन है जिसकी प्रतिक्रिया एक पैरामीटर के रूप में पारित होती है।
promise // वह वादा जो हमने ऊपर पिछले कोड स्निपेट में बनाया था। .then(response => {// यहां हिट करता है अगर सफल प्रतिक्रिया // सफल प्रतिक्रिया पर होने वाला तर्क कंसोल। लॉग (प्रतिक्रिया); कंसोल। लॉग ("वादा के बाद"); }) / यहां किसी भी त्रुटि को पकड़ता है।// त्रुटि प्रतिक्रिया पर होने वाला तर्ककिसी डेटाबेस पर कॉल करते समय या HTTP अनुरोध करते समय अक्सर वादों का उपयोग किया जाता है।
Async/प्रतीक्षित फ़ंक्शन
अंतिम तरीका हम
sleep()
का अनुकरण कर सकते हैं विधि async/प्रतीक्षा कार्यों का उपयोग करके है। अनिवार्य रूप से, ये एसिंक्रोनस फ़ंक्शंस उसी तर्क के निर्माण का एक और तरीका है जिसका उपयोग हम प्रॉमिस में करेंगे, लेकिन कम कोड के साथ।
शब्द
async
function
. से पहले रखा जाता है पूर्व-ES6 फ़ंक्शन में कीवर्ड, और ES6+ फ़ंक्शन में पैरामीटर से पहले। आगे बढ़ने से पहले आप जो भी तर्क करना चाहते हैं वह कोड के इस ब्लॉक में जाता है।
const firstFunction =() => {// तर्क जिसे आप अतुल्यकालिक रूप से करना चाहते हैं उसे हल करने दें =सत्य; अगर (समाधान) {respObj ={संदेश:"समाधान!"}; वापसी respObj.message; } और { errObj ={संदेश:"त्रुटि!"}; वापसी errObj.message; } } const asyncExample =async () => {// async कीवर्ड इससे पहले कि पैरामीटर कंसोल.लॉग ("कॉलिंग फ़ंक्शन ..."); परिणाम दें =पहले फ़ंक्शन का इंतजार करें ();// प्रतीक्षा उस फ़ंक्शन के आह्वान से पहले चला जाता है जिसमें आपका तर्क होता है।// फ़ंक्शन पूरा होने तक अगली पंक्ति में नहीं जाएगा। कंसोल.लॉग (परिणाम); वापसी परिणाम; } asyncExample () // async/प्रतीक्षा फ़ंक्शन को आमंत्रित करता हैएसिंक्स/प्रतीक्षा फ़ंक्शंस का उपयोग करने से लगभग समान एसिंक्रोनस वादा-आधारित प्रक्रिया होती है लेकिन कम कोड के साथ।
निष्कर्ष
इस लेख में हमने
sleep()
. की नकल करने के तरीकों पर एक नज़र डाली फ़ंक्शन जो अन्य प्रोग्रामिंग भाषाओं के मूल निवासी है। हमनेsetTimeout()
. का इस्तेमाल किया अतुल्यकालिक जावास्क्रिप्ट कार्यों की अवधारणा को प्रदर्शित करने के लिए ताकि हम वादे और async/प्रतीक्षा कार्यों को देख सकें।