"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > जावास्क्रिप्ट में एसिंक्रोनस प्रोग्रामिंग: कॉलबैक बनाम वादे बनाम एसिंक/प्रतीक्षा

जावास्क्रिप्ट में एसिंक्रोनस प्रोग्रामिंग: कॉलबैक बनाम वादे बनाम एसिंक/प्रतीक्षा

2024-07-31 को प्रकाशित
ब्राउज़ करें:311

Asynchronous Programming in JavaScript: Callbacks vs Promises vs Async/Await

एसिंक्रोनस प्रोग्रामिंग जावास्क्रिप्ट का एक प्रमुख पहलू है जो डेवलपर्स को मुख्य थ्रेड को अवरुद्ध किए बिना लंबे नेटवर्क अनुरोध, फ़ाइल संचालन और अन्य समय लेने वाले कार्यों को करने की अनुमति देता है। यह सुनिश्चित करता है कि एप्लिकेशन उत्तरदायी और उपयोगकर्ता के अनुकूल बने रहें। जावास्क्रिप्ट एसिंक्रोनस ऑपरेशंस को संभालने के लिए तीन मुख्य तरीके प्रदान करता है: कॉलबैक, वादे और एसिंक/प्रतीक्षा। इस लेख में, हम विस्तृत उदाहरणों के माध्यम से इनमें से प्रत्येक विधि पर गहराई से विचार करेंगे, उनके वाक्यविन्यास, उपयोग और अंतर की खोज करेंगे।

विषयसूची

  1. एसिंक्रोनस प्रोग्रामिंग का परिचय
  2. कॉलबैक
    • सिंटैक्स और उदाहरण
    • फायदे और नुकसान
  3. वादे
    • सिंटैक्स और उदाहरण
    • वादों की श्रृंखला
    • फायदे और नुकसान
  4. Async/प्रतीक्षा करें
    • सिंटैक्स और उदाहरण
    • त्रुटि प्रबंधन
    • फायदे और नुकसान
  5. तुलना और सर्वोत्तम अभ्यास
  6. निष्कर्ष

एसिंक्रोनस प्रोग्रामिंग का परिचय

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

कॉलबैक

सिंटैक्स और उदाहरण

कॉलबैक जावास्क्रिप्ट में अतुल्यकालिक संचालन को संभालने के शुरुआती तरीकों में से एक है। कॉलबैक बस एक फ़ंक्शन है जो किसी अन्य फ़ंक्शन के तर्क के रूप में पारित किया जाता है, जिसे एसिंक्रोनस ऑपरेशन पूरा होने के बाद निष्पादित किया जाएगा।

function fetchData(callback) {
    setTimeout(() => {
        callback("Data fetched!");
    }, 1000);
}

function displayData(data) {
    console.log(data);
}

fetchData(displayData);

उपरोक्त उदाहरण में, फ़ेचडेटा सेटटाइमआउट का उपयोग करके एक अतुल्यकालिक ऑपरेशन का अनुकरण करता है। 1 सेकंड के बाद, यह डिस्प्लेडेटा फ़ंक्शन को कॉल करता है, प्राप्त डेटा को एक तर्क के रूप में पास करता है।

फायदे और नुकसान

फायदे:

  • छोटे कार्यों के लिए सरल और सीधा।
  • एसिंक्रोनस ऑपरेशन पूरा होने के बाद कोड निष्पादित करने का एक तरीका प्रदान करता है।

नुकसान:

  • जब कई एसिंक्रोनस ऑपरेशंस नेस्टेड होते हैं तो "कॉलबैक हेल" हो सकता है, जिससे कोड को पढ़ना और बनाए रखना मुश्किल हो जाता है।
  • त्रुटि प्रबंधन बोझिल है, क्योंकि प्रत्येक कॉलबैक में त्रुटियों को प्रबंधित करने की आवश्यकता होती है।

वादे

सिंटैक्स और उदाहरण

कॉलबैक से जुड़े मुद्दों के समाधान के लिए ईएस6 (ईसीएमएस्क्रिप्ट 2015) में वादे पेश किए गए थे। एक वादा एक ऐसे ऑपरेशन का प्रतिनिधित्व करता है जो अभी तक पूरा नहीं हुआ है लेकिन भविष्य में अपेक्षित है। यह तीन स्थितियों में से एक में हो सकता है: लंबित, पूर्ण या अस्वीकृत।

function fetchData() {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            resolve("Data fetched!");
        }, 1000);
    });
}

fetchData()
    .then(data => {
        console.log(data);
    })
    .catch(error => {
        console.error("Error:", error);
    });

इस उदाहरण में, FetchData एक वादा लौटाता है जो "डेटा प्राप्त किया गया!" के साथ हल होता है। 1 सेकंड के बाद. तत्कालीन विधि का उपयोग हल किए गए मान को संभालने के लिए किया जाता है, और कैच का उपयोग किसी भी त्रुटि को संभालने के लिए किया जाता है।

वादों की जंजीर

वादों को अनुक्रम में अतुल्यकालिक संचालन की एक श्रृंखला निष्पादित करने के लिए जंजीर में बांधा जा सकता है।

function fetchData() {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            resolve("Data fetched!");
        }, 1000);
    });
}

function processData(data) {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            resolve(`${data} Processed!`);
        }, 1000);
    });
}

fetchData()
    .then(data => {
        console.log(data);
        return processData(data);
    })
    .then(processedData => {
        console.log(processedData);
    })
    .catch(error => {
        console.error("Error:", error);
    });

इस उदाहरण में, प्रोसेसडेटा को फ़ेचडेटा के बाद कॉल किया जाता है, और परिणाम को तब का उपयोग करके अनुक्रम में प्रबंधित किया जाता है।

फायदे और नुकसान

फायदे:

  • एसिंक्रोनस ऑपरेशंस की चेनिंग की अनुमति देकर कॉलबैक नरक से बचा जाता है।
  • कैच के साथ अंतर्निहित त्रुटि प्रबंधन प्रदान करता है।
  • कोड पठनीयता और रखरखाव में सुधार करता है।

नुकसान:

  • एकाधिक नेस्टेड कॉल के साथ अभी भी जटिल हो सकता है।
  • श्रृंखला में त्रुटि प्रबंधन गैर-तुच्छ हो सकता है।

Async/प्रतीक्षा करें

सिंटैक्स और उदाहरण

ES2017 में पेश किया गया Async/Await, प्रॉमिस का उपयोग करके एसिंक्रोनस कोड लिखने का अधिक पठनीय और संक्षिप्त तरीका प्रदान करता है। async कीवर्ड का उपयोग एसिंक्रोनस फ़ंक्शन को परिभाषित करने के लिए किया जाता है, और wait कीवर्ड का उपयोग किसी वादे के हल होने तक निष्पादन को रोकने के लिए किया जाता है।

async function fetchData() {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            resolve("Data fetched!");
        }, 1000);
    });
}

async function displayData() {
    const data = await fetchData();
    console.log(data);
}

displayData();

इस उदाहरण में, डिस्प्लेडेटा एक एसिंक्रोनस फ़ंक्शन है जो डेटा लॉग करने से पहले फ़ेचडेटा के पूरा होने की प्रतीक्षा करता है।

त्रुटि प्रबंधन

Async/Await के साथ त्रुटि प्रबंधन ट्राई/कैच ब्लॉक का उपयोग करके किया जा सकता है।

async function fetchData() {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            reject("Failed to fetch data!");
        }, 1000);
    });
}

async function displayData() {
    try {
        const data = await fetchData();
        console.log(data);
    } catch (error) {
        console.error("Error:", error);
    }
}

displayData();

यहां, यदि फ़ेचडेटा विफल हो जाता है, तो त्रुटि पकड़ी जाती है और कैच ब्लॉक द्वारा लॉग किया जाता है।

फायदे और नुकसान

फायदे:

  • एसिंक्रोनस कोड को सरल बनाता है, जिससे यह सिंक्रोनस कोड जैसा दिखता है।
  • कोड पठनीयता और रखरखाव को बढ़ाता है।
  • ट्राई/कैच ब्लॉक के साथ त्रुटि प्रबंधन को सरल बनाता है।

नुकसान:

  • वादों को समझने की आवश्यकता है क्योंकि Async/Await उनके ऊपर बनाया गया है।
  • अभी भी अपेक्षाकृत नया है, इसलिए हो सकता है कि कुछ वातावरण इसका पूरी तरह से समर्थन न करें।

तुलना और सर्वोत्तम अभ्यास

तुलना

  • कॉलबैक: सरल, एकल-स्तरीय अतुल्यकालिक कार्यों के लिए उपयुक्त लेकिन जटिल परिदृश्यों में कॉलबैक नरक का कारण बन सकता है।
  • वादे: पठनीयता और प्रबंधनीयता में सुधार, अतुल्यकालिक संचालन की श्रृंखला की अनुमति। कैच के साथ अंतर्निहित त्रुटि प्रबंधन।
  • Async/Await: एसिंक्रोनस कोड लिखने का सबसे पठनीय और रखरखाव योग्य तरीका प्रदान करता है। त्रुटि प्रबंधन को सरल बनाता है और सिंक्रोनस कोड जैसा दिखता है।

सर्वोत्तम प्रथाएं

  • अधिकांश परिदृश्यों के लिए Async/Await का उपयोग करें जहां आपको अतुल्यकालिक संचालन को संभालने की आवश्यकता होती है। यह सर्वोत्तम पठनीयता और सरलता प्रदान करता है।
  • जब आपको अनुक्रम में कई एसिंक्रोनस ऑपरेशन करने की आवश्यकता होती है या प्रॉमिस लौटाने वाली लाइब्रेरी का उपयोग करते समय प्रॉमिस का उपयोग करते हैं।
  • कॉलबैक से बचें जब तक कि लीगेसी कोड के साथ काम नहीं कर रहे हों या बहुत सरल अतुल्यकालिक कार्यों से निपट न रहे हों।

निष्कर्ष

उत्तरदायी और कुशल अनुप्रयोगों के निर्माण के लिए जावास्क्रिप्ट में अतुल्यकालिक प्रोग्रामिंग आवश्यक है। कॉलबैक, प्रॉमिस और Async/Await के बीच अंतर को समझने से डेवलपर्स को अपने विशिष्ट उपयोग के मामले के लिए सही टूल चुनने की अनुमति मिलती है। जबकि कॉलबैक एसिंक्रोनस ऑपरेशंस को संभालने का सबसे सरल रूप है, वे गड़बड़ कोड का कारण बन सकते हैं। वादे अधिक संरचित दृष्टिकोण प्रदान करते हैं, लेकिन Async/Await सबसे सुंदर और पठनीय समाधान प्रदान करता है। सर्वोत्तम प्रथाओं का पालन करके और इन उपकरणों को समझकर, डेवलपर्स स्वच्छ, रखरखाव योग्य और कुशल अतुल्यकालिक कोड लिख सकते हैं।

विज्ञप्ति वक्तव्य यह आलेख यहां पुन: प्रस्तुत किया गया है: https://dev.to/itsshaikhaj/asynchronous-programming-in-javascript-callbacks-vs-promises-vs-asyncawait-690?1 यदि कोई उल्लंघन है, तो कृपया स्टडी_गोलंग@163.com पर संपर्क करें। इसे हटाने के लिए
नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3