मैं कुछ वर्षों से वेब-आधारित जावास्क्रिप्ट (वेनिला जेएस, jQuery, बैकबोन, आदि) कर रहा हूं और हाल ही में मैं Node.js. के साथ कुछ काम कर रहा हूं। मुझे "नॉन-ब्लॉकिंग" प्रोग्रामिंग के हैंग होने में थोड़ा समय लगा, लेकिन मैंने अब आईओ ऑपरेशंस और व्हाट्सएप के लिए कॉलबैक का इस्तेमाल करने की आदत डाल ली है।
मैं समझता हूं कि जावास्क्रिप्ट प्रकृति द्वारा एकल-पिरोया गया है। मैं नोड "घटना कतार" की अवधारणा को समझता हूं। मुझे समझ में नहीं आता है कि क्या निर्धारित करता है कि क्या एक व्यक्तिगत जावास्क्रिप्ट ऑपरेशन "अवरुद्ध" बनाम "गैर-अवरुद्ध" है। मुझे कैसे पता चलेगा कि मैं बाद में कोड में उपयोग करने के लिए मेरे लिए एक आउटपुट का उत्पादन करने के लिए किस ऑपरेशन पर निर्भर हो सकता हूं, और जिन लोगों को मुझे कॉलबैक पास करना होगा, इसलिए प्रारंभिक ऑपरेशन पूरा होने के बाद मैं आउटपुट को प्रोसेस कर सकता हूं? कहीं जावास्क्रिप्ट कार्यों की एक सूची है जो अतुल्यकालिक / गैर-अवरोधक हैं, और उन लोगों की सूची है जो तुल्यकालिक / अवरुद्ध हैं? मेरे जावास्क्रिप्ट ऐप को एक विशाल दौड़ की स्थिति होने से क्या रोक रहा है?
मुझे पता है कि लंबे समय तक चलने वाले ऑपरेशन, जैसे नोड पर वेब में आईओ ऑपरेशन और वेब पर AJAX संचालन, उन्हें अतुल्यकालिक होने की आवश्यकता होती है और इसलिए कॉलबैक का उपयोग करते हैं - लेकिन कौन निर्धारित कर रहा है कि "लंबे समय" के रूप में क्या योग्यता है? क्या इन परिचालनों के भीतर किसी प्रकार का ट्रिगर है जो उन्हें सामान्य "ईवेंट कतार" से निकालता है? यदि नहीं, तो उन्हें सरल ऑपरेशनों से अलग क्या बनाता है जैसे कि वैरिएबल के मानों को वेरिएबल या लूपिंग के माध्यम से, जो ऐसा लगता है कि हम एक समकालिक तरीके से समाप्त करने के लिए निर्भर कर सकते हैं?
शायद मैं इस बारे में सही ढंग से नहीं सोच रहा हूँ - उम्मीद है कि कोई मुझे सीधे सेट कर सकता है। धन्यवाद!