जावास्क्रिप्ट में एसिंक्रोनस प्रोग्रामिंग: शुरुआती लोगों के लिए पूर्ण गाइड

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

जावास्क्रिप्ट में एसिंक्रोनस प्रोग्रामिंग का परिचय

\n\n

जावास्क्रिप्ट एक सिंगल-थ्रेडेड प्रोग्रामिंग भाषा है। इसका मतलब है कि किसी भी समय केवल एक ही ऑपरेशन निष्पादित होता है। हालाँकि, यदि सभी ऑपरेशन क्रमिक रूप से निष्पादित होते, तो सर्वर से डेटा लोड करने या फ़ाइल पढ़ने पर ब्राउज़र "हैंग" हो जाता। यहीं पर एसिंक्रोनस प्रोग्रामिंग काम आती है।

\n\n

एसिंक्रोनस प्रोग्रामिंग मुख्य निष्पादन थ्रेड को ब्लॉक किए बिना लंबी अवधि के ऑपरेशन (API अनुरोध, फ़ाइल पढ़ना, टाइमर) करने की अनुमति देता है। कार्य पूरा होने की प्रतीक्षा करने के बजाय, कोड निष्पादित होता रहता है, और परिणाम बाद में संसाधित किया जाता है। Node.js पर तेज़ और उत्तरदायी एप्लिकेशन बनाने के लिए यह एक महत्वपूर्ण अवधारणा है।

\n\n

इस गाइड में, हम एसिंक्रोनस प्रोग्रामिंग के तीन मुख्य दृष्टिकोणों पर चर्चा करेंगे: कॉलबैक, प्रॉमिस और async/await सिंटैक्स। आप सीखेंगे कि एसिंक्रोनस कोड के साथ सही तरीके से कैसे काम करें और शुरुआती लोगों की सामान्य गलतियों से कैसे बचें।

\n\n

1. कॉलबैक (Callbacks): एसिंक्रोनसिटी का आधार

\n\n

कॉलबैक (callback) एक फ़ंक्शन है जिसे किसी अन्य फ़ंक्शन में तर्क के रूप में पास किया जाता है और एसिंक्रोनस ऑपरेशन पूरा होने के बाद कॉल किया जाता है। जावास्क्रिप्ट में एसिंक्रोनसिटी के साथ काम करने का यह सबसे पुराना और बुनियादी तरीका है।

\n\n

setTimeout के साथ उदाहरण

\n\n

बिल्ट-इन फ़ंक्शन setTimeout एसिंक्रोनस ऑपरेशन का एक क्लासिक उदाहरण है। यह एक कॉलबैक और मिलीसेकंड में देरी लेता है:

\n\n
console.log('शुरू');\n\nsetTimeout(() => {\n    console.log('2 सेकंड बीत गए');\n}, 2000);\n\nconsole.log('अंत');\n\n// आउटपुट:\n// शुरू\n// अंत\n// 2 सेकंड बीत गए
\n\n

ध्यान दें: "अंत" कॉलबैक से संदेश से पहले प्रिंट होता है। यही एसिंक्रोनसिटी है — कोड setTimeout के पूरा होने की प्रतीक्षा नहीं करता।

\n\n

"Callback Hell" की समस्या

\n\n

जब आपके पास कई नेस्टेड एसिंक्रोनस ऑपरेशन होते हैं, तो कोड पढ़ने में मुश्किल हो जाता है। इस घटना को "कॉलबैक हेल" (Callback Hell) कहा जाता है:

\n\n
fs.readFile('file1.txt', (err, data1) => {\n    if (err) throw err;\n    fs.readFile('file2.txt', (err, data2) => {\n        if (err) throw err;\n        fs.readFile('file3.txt', (err, data3) => {\n            if (err) throw err;\n            console.log(data1, data2, data3);\n        });\n    });\n});
\n\n

ऐसे कोड को बनाए रखना और डीबग करना कठिन है। सौभाग्य से, आधुनिक जावास्क्रिप्ट अधिक सुरुचिपूर्ण समाधान प्रदान करता है।

\n\n

2. प्रॉमिस (Promises): एसिंक्रोनसिटी का सुरुचिपूर्ण प्रबंधन

\n\n

Promise (प्रॉमिस, वादा) एक ऑब्जेक्ट है जो एसिंक्रोनस ऑपरेशन के परिणाम का प्रतिनिधित्व करता है। प्रॉमिस तीन अवस्थाओं में से एक में हो सकता है:

\n\n
    \n
  • Pending (लंबित) — प्रारंभिक अवस्था, ऑपरेशन अभी पूरा नहीं हुआ है
  • \n
  • Fulfilled (पूरा) — ऑपरेशन सफलतापूर्वक पूरा हो गया है
  • \n
  • Rejected (अस्वीकृत) — ऑपरेशन त्रुटि के साथ पूरा हुआ है
  • \n
\n\n

Promise का निर्माण और उपयोग

\n\n
const myPromise = new Promise((resolve, reject) => {\n    setTimeout(() => {\n        const success = true;\n        if (success) {\n            resolve('डेटा प्राप्त हुआ');\n        } else {\n            reject('डेटा प्राप्त करने में त्रुटि');\n        }\n    }, 2000);\n});\n\nmyPromise\n    .then(result => {\n        console.log(result); // "डेटा प्राप्त हुआ"\n    })\n    .catch(error => {\n        console.error(error); // "डेटा प्राप्त करने में त्रुटि"\n    })\n    .finally(() => {\n        console.log('ऑपरेशन पूरा हुआ');\n    });
\n\n

प्रॉमिस चेनिंग (Chaining)

\n\n

प्रॉमिस को चेन में जोड़ा जा सकता है, जो "कॉलबैक हेल" से बचने में मदद करता है:

\n\n
function readFile(filename) {\n    return new Promise((resolve, reject) => {\n        fs.readFile(filename, 'utf8', (err, data) => {\n            if (err) reject(err);\n            else resolve(data);\n        });\n    });\n}\n\nreadFile('file1.txt')\n    .then(data1 => {\                

ब्लॉग

पुस्तक अनुशंसाएँ