2016-10-12 17 views
6

जावास्क्रिप्ट वादे का उपयोग करते समय, ईवेंट लूप अवरुद्ध हो जाता है?क्या जावास्क्रिप्ट वादा करता है स्टैक

मेरी समझ यह है कि & async का इंतजार कर, ऑपरेशन पूरा होने तक स्टैक स्टॉप बनाता है। क्या यह स्टैक को अवरुद्ध करके ऐसा करता है या क्या यह कॉलबैक के समान कार्य करता है और प्रक्रिया के पास एपीआई को पास करता है?

+1

मेरी समझ यह है कि यह एक वादे का पूरा बिंदु है। – Feathercrown

+0

* "क्या यह कॉलबैक के समान कार्य करता है" * - सामान्य अर्थ में, कॉलबैक को संदर्भ के आधार पर असीमित रूप से * या * समकालिक रूप से कहा जा सकता है। लेकिन वादे का पूरा बिंदु एसिंक (गैर-अवरुद्ध) संचालन की अनुमति देना है। – nnnnnn

+0

इस अर्थ में कोई "ढेर" नहीं है कि आप इसका उपयोग कर रहे हैं। मुझे लगता है कि आपका मतलब "ईवेंट लूप" है। शायद आपको अपना शीर्षक और अपने प्रश्न का शरीर भी संपादित करना चाहिए। –

उत्तर

6

जावास्क्रिप्ट वादे का उपयोग करते समय, ईवेंट लूप अवरुद्ध हो जाता है?

सं वादे केवल एक घटना सूचना प्रणाली है। वे खुद एक ऑपरेशन नहीं हैं। वे उचित .then() या .catch() हैंडलर को कॉल करके हल या खारिज करने का जवाब देते हैं और यदि अन्य वादों के लिए जंजीर हो जाते हैं, तो वे उन हैंडलरों को कॉल करने में देरी कर सकते हैं जब तक उन्हें हल/अस्वीकार करने के लिए जरूरी वादे नहीं होते। चूंकि ऐसा वादा कुछ भी अवरुद्ध नहीं करता है और निश्चित रूप से ईवेंट लूप को अवरुद्ध नहीं करता है।

मेरे समझ है कि इंतजार का उपयोग कर & async, बनाता ढेर रोक आपरेशन पूरा कर लिया है जब तक है। क्या यह स्टैक को अवरुद्ध करके ऐसा करता है या क्या यह कॉलबैक के समान कार्य करता है और प्रक्रिया के पास एक प्रकार का एपीआई है?

await बस वाक्यात्मक चीनी कि थोड़ा सरल वाक्य रचना के साथ एक .then() हैंडलर की जगह है। लेकिन, कवर के तहत ऑपरेशन वही है। await के बाद आने वाला कोड मूल रूप से अदृश्य .then() हैंडलर के अंदर रखा गया है और इवेंट लूप की कोई अवरोध नहीं है, जैसे कि .then() हैंडलर के साथ कोई अवरोध नहीं है।

4

एक await केवल वर्तमान async function ब्लॉक करता है, ईवेंट लूप सामान्य रूप से चल रहा है। जब वादा सुलझाता है, तो फ़ंक्शन बॉडी का निष्पादन फिर से शुरू हो जाता है जहां यह बंद हो जाता है।

प्रत्येक async/await समकक्ष .then(…) -कॉलबैक प्रोग्राम में परिवर्तित किया जा सकता है, और समवर्ती परिप्रेक्ष्य से इसी तरह काम करता है। तो जबकि एक वादा await एड है, अन्य घटनाएं आग लग सकती हैं और मनमाने ढंग से अन्य कोड चल सकता है।

+4

"केवल एक मौजूदा एसिंक फ़ंक्शन को अवरुद्ध करता है" --- मुझे लगता है कि इसे बेहतर शब्द की आवश्यकता है, "ब्लॉक" यहां भ्रमित है। – zerkms

+0

@zerkms कोई सुझाव? असल में मुझे लगता है कि "[अवरुद्ध] (https://en.wikipedia.org/wiki/Blocking_ (कंप्यूटिंग))" यदि आप कार्य/प्रक्रिया बनाने के लिए प्रत्येक कॉल को 'async फ़ंक्शन' पर मानते हैं तो यह काफी उपयुक्त है। – Bergi

+0

शायद। संपूर्ण 'async/await' अवधारणा समझाने और सही शब्दों के साथ करने की सबसे आसान बात नहीं है मेरी भाषा क्षमताओं पर है। – zerkms

संबंधित मुद्दे