आपके द्वारा उल्लिखित अवधारणाओं (घटना-संचालित, गैर-अवरुद्ध, एसिंक, कॉलबैक) जावास्क्रिप्ट के लिए विशिष्ट नहीं हैं और उन्हें अधिक सामान्य संदर्भ में समझना मूल्यवान है। वे सभी संसाधनों को सुदृढ़ तरीके से संभालने के आसपास घूमते हैं जिन पर हमारा कोई नियंत्रण नहीं होता है।
कल्पना करें कि एक टीसीपी कनेक्शन से डेटा की प्रतीक्षा है, ओएस को फाइल को हटाने के लिए इंतज़ार कर रहा है, या किसी उपयोगकर्ता को बटन पर क्लिक करने का इंतजार है। यदि आपने इसे चरण-दर-चरण फैशन में प्रोग्राम किया है (चरण-दर-चरण तुल्यकालिक) है, तो आप "चरण 1", "चरण 2", "चरण 3" के साथ क्रूज़ करेंगे - जब तक आप "कुछ होने के लिए प्रतीक्षा करें" चरण दबाएं। उस बिंदु पर, आपका प्रोग्राम तब तक रुक जाएगा और डेटा को प्राप्त होने तक बगड़ने से इनकार कर देगा, पुष्टि हटाई जाएगी, या बटन क्लिक प्राप्त होगा। दूसरे शब्दों में, कॉल कॉल करने से प्रोग्राम को कॉल करें। यह बहुत अक्षम है क्योंकि अन्य टीसीपी कनेक्शन, फ़ाइल ऑपरेशंस और यूआई क्रियाएं हैं जिन पर हमारा ध्यान देने की आवश्यकता है और हम जिस आइटम की प्रतीक्षा कर रहे हैं उस पर निर्भर नहीं हैं।
कई मामलों में, यह इंगित करना बेहतर होगा कि संसाधन में रुचि होने पर हम संसाधन में रूचि रखते हैं और चरण-दर-चरण निर्देशों के बाहर सूचनाएं प्राप्त करते हैं। अवधारणाओं की अपनी सूची से:
- Events संसाधनों हम में रुचि रखते हैं में परिवर्तन कर रहे हैं - हमारे TCP कनेक्शन कुछ डेटा प्राप्त किया, फ़ाइल को हटाने पूरा हो गया है, या एक उपयोगकर्ता एक बटन क्लिक किया।
- Asynchronous कॉल ओएस या रनटाइम को बताते हैं कि हम संसाधन के साथ कुछ करने में रुचि रखते हैं। वे गैर-अवरुद्ध हैं - संसाधन में बदलाव के लिए इंतजार करते समय हमारा प्रोग्राम कुछ और काम कर सकता है।
- Callbacks संसाधन बदलते समय निष्पादित किए जाने वाले कार्य होते हैं। एक एसिंक्रोनस संसाधन कॉल अक्सर कॉलबैक फ़ंक्शंस के लिए एक या अधिक संदर्भ स्वीकार करता है (सफलता के लिए एक, एक त्रुटि के लिए, इत्यादि ...)। जब संसाधन बदलता है, रनटाइम उपयुक्त कॉलबैक को कॉल करता है।
हम इन अवधारणाओं Node.js के साथ एक फ़ाइल का नाम बदलने करके इसका उदाहरण देख सकते हैं:
var fs = require('fs');
// args (current file name, new file name, callback function)
fs.rename('/tmp/hello', '/tmp/world', function (err) {
// this occurs when the rename is complete
if (err) throw err;
console.log('rename complete');
});
console.log('step after rename');
तीसरा तर्क अजीब लग सकता है। यह एक अनाम (anonymous) फ़ंक्शन है जिसे नाम पूर्ण होने पर बुलाया जाएगा।
ध्यान दें कि चूंकि fs।नाम अतुल्यकालिक है, यह बताना असंभव है कि क्या हम पहले 'नाम बदलें' या 'नाम बदलने के बाद चरण' देखेंगे। यह घटना-संचालित/असीमित प्रोग्रामिंग का नकारात्मक पक्ष है - यदि हमारे पास परस्पर निर्भर कार्यों का एक जटिल सेट है, तो हमें उन कार्यों पर कार्य करने से पहले निर्भर कार्यों को बीमा करने के लिए बेहद सावधान रहना होगा। तथ्य यह है कि एसिंक कॉल समापन का क्रम बदल सकता है बहुत सूक्ष्म बग का कारण बन सकता है।
यह भी देखें:
संपादित की और अधिक जटिल हेरफेर:
को समझने के लिए सबसे अच्छा तरीका है node.js डाउनलोड, बिल्ड, इंस्टा है ll, और इसका इस्तेमाल करें। आपको इसकी आवश्यकता होगी:
ध्यान रखें कि node.js एक बहुत ही खास जगह भरता है - i टी नेटवर्क प्रोग्राम बनाने के लिए डिज़ाइन किया गया है। यह अन्य प्रकार के कार्यक्रमों के लिए सही उपकरण नहीं हो सकता है।
बहुत सारे जावास्क्रिप्ट प्रोग्राम लिखने और इसे अच्छी और उचित करने की देखभाल करने के साथ शुरू करें। यदि आप जावास्क्रिप्ट और संबंधित तकनीकों को नहीं समझते हैं तो भी नोडजेएस पर विचार करने का कोई मतलब नहीं है। मेरा कठोर होने का मतलब नहीं है, लेकिन आपको वह सीखने की ज़रूरत है; जावास्क्रिप्ट और इसका उपयोग कैसे किया जाता है और इसका उपयोग कैसे किया जाता है, ये मूल बातें हैं। Ergo, मास्टर जावास्क्रिप्ट पहले;) stackoverflow पर उस पर बहुत सारे awnsers। – BGerrissen
आपकी टिप्पणी के लिए धन्यवाद। मुझे जेएस सीखना मुश्किल लगता है क्योंकि मुझे नहीं पता कि इसके साथ क्या करना है। अगर मैं Django, रेल, आदि सीखना चाहता हूं, तो मुझे पता है कि जावास्क्रिप्ट नहीं करना है। साथ ही, क्या आप एक अच्छी किताब की सिफारिश कर सकते हैं जो मूल रूप से node.js ज्ञान के लिए मूल बातें रख सकती है? धन्यवाद – donald
बस node.js. पर एक नज़र डाली थी। यह सिर्फ जेएस सिंटैक्स का उपयोग कर रहा है जैसे कि jQuery है। क्या आपको लगता है कि node.js का उपयोग करते समय जावास्क्रिप्ट का गहरा ज्ञान अधिक सहायक होगा? वैसे भी, पढ़ने के लिए पुस्तक जावास्क्रिप्ट है: निश्चित गाइड – mplungjan