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

जेएस: वादा या कॉलबैक?

2024-11-02 को प्रकाशित
ब्राउज़ करें:523

JS: Promise or Callback?

जावास्क्रिप्ट में वादे बनाम कॉलबैक को समझना

प्रमाणन परीक्षण के लिए मुख्य प्रश्न और उत्तर

  1. कॉलबैक फ़ंक्शन क्या है, और यह नियमित फ़ंक्शन से कैसे भिन्न है?

    • एक कॉलबैक फ़ंक्शन को किसी अन्य फ़ंक्शन के तर्क के रूप में पास किया जाता है और एसिंक्रोनस ऑपरेशंस को संभालने के लिए लागू किया जाता है। नियमित कार्यों के विपरीत, कॉलबैक को एक निश्चित कार्य पूरा होने के बाद निष्पादित करने के लिए डिज़ाइन किया गया है।
  2. प्रॉमिस कोड पठनीयता में सुधार कैसे करते हैं और कॉलबैक की तुलना में अतुल्यकालिक संचालन का प्रबंधन कैसे करते हैं?

    • वादे चेनिंग और बेहतर त्रुटि प्रबंधन की अनुमति देते हैं, जिससे कोड अधिक पठनीय और रखरखाव योग्य हो जाता है। वे "कॉलबैक नरक" के रूप में जानी जाने वाली गहरी नेस्टेड संरचनाओं से बचने में मदद करते हैं।
  3. किसी वादे की मुख्य अवस्थाएँ क्या हैं, और वे इन अवस्थाओं के बीच कैसे परिवर्तित होती हैं?

    • मुख्य स्थितियाँ हैं: लंबित (प्रारंभिक स्थिति), पूर्ण (ऑपरेशन सफलतापूर्वक पूरा हुआ), और अस्वीकृत (ऑपरेशन विफल)। एक वादा लंबित से पूर्ण या अस्वीकृत में परिवर्तित हो जाता है।
  4. आप प्रॉमिस का उपयोग करके त्रुटियों को कैसे संभाल सकते हैं, और इसकी तुलना कॉलबैक के साथ त्रुटि प्रबंधन से कैसे की जाती है?

    • वादे सुव्यवस्थित तरीके से त्रुटियों को संभालने के लिए एक कैच विधि प्रदान करते हैं, जबकि कॉलबैक के साथ त्रुटि प्रबंधन के लिए अक्सर नेस्टेड कॉलबैक में त्रुटि ऑब्जेक्ट और कई चेक पास करने की आवश्यकता होती है।
  5. Promise.all और Promise.race के बीच क्या अंतर है, और आप प्रत्येक का उपयोग कब करेंगे?

    • Promise.all तब हल हो जाता है जब सभी इनपुट प्रॉमिस हल हो जाते हैं, जिससे यह कई एसिंक्रोनस ऑपरेशनों के पूरा होने की प्रतीक्षा करने के लिए उपयोगी हो जाता है। जैसे ही किसी एक इनपुट प्रॉमिस का समाधान होता है, Promise.race हल हो जाता है, यह उन परिदृश्यों के लिए उपयोगी है जहां पहले पूर्ण ऑपरेशन के परिणाम की आवश्यकता होती है।
  6. एसिंक/वेट सिंटैक्स वादों के साथ काम करना कैसे सरल बनाता है, और वेटिंग का उपयोग करने के नियम क्या हैं?

    • एसिंक/वेट सिंटैक्स एसिंक्रोनस कोड को सिंक्रोनस तरीके से लिखने की अनुमति देता है, जिससे पठनीयता में सुधार होता है। प्रतीक्षा का उपयोग केवल एसिंक फ़ंक्शंस के अंदर किया जा सकता है और वादा पूरा होने तक निष्पादन को रोक देता है।

परिचय

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

कॉलबैक पर वादों के लाभ

बेहतर पठनीयता और रख-रखाव

कॉलबैक, हालांकि कार्यात्मक हैं, अक्सर "कॉलबैक नरक" के रूप में जानी जाने वाली गहरी नेस्टेड संरचनाओं की ओर ले जाते हैं, जिससे कोड को पढ़ना और बनाए रखना मुश्किल हो जाता है।

कॉलबैक हेल का उदाहरण:
fetchData(function(response1) {
  fetchMoreData(response1, function(response2) {
    fetchEvenMoreData(response2, function(response3) {
      console.log(response3);
    });
  });
});
वादों के साथ सुधार:
fetchData()
  .then(response1 => fetchMoreData(response1))
  .then(response2 => fetchEvenMoreData(response2))
  .then(response3 => console.log(response3))
  .catch(error => console.error(error));

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

कॉलबैक के साथ, त्रुटि प्रबंधन बोझिल हो सकता है क्योंकि आपको त्रुटि ऑब्जेक्ट को पास करने और प्रत्येक स्तर पर उन्हें संभालने की आवश्यकता होती है।

कॉलबैक के साथ त्रुटि प्रबंधन:
function fetchData(callback) {
  setTimeout(() => {
    if (/* error condition */) {
      callback(new Error('An error occurred'), null);
    } else {
      callback(null, 'data');
    }
  }, 1000);
}

fetchData((error, data) => {
  if (error) {
    console.error(error);
  } else {
    console.log(data);
  }
});
वादों से निपटने में त्रुटि:
function fetchData() {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      if (/* error condition */) {
        reject(new Error('An error occurred'));
      } else {
        resolve('data');
      }
    }, 1000);
  });
}

fetchData()
  .then(data => console.log(data))
  .catch(error => console.error(error));

उन्नत वादा तरीके

वादा.सभी

Promise.all तब उपयोगी होता है जब आपको आगे बढ़ने से पहले कई एसिंक्रोनस ऑपरेशनों के पूरा होने की प्रतीक्षा करनी होती है।

उदाहरण:
const promise1 = Promise.resolve(3);
const promise2 = 42;
const promise3 = new Promise((resolve, reject) => {
  setTimeout(resolve, 100, 'foo');
});

Promise.all([promise1, promise2, promise3]).then(values => {
  console.log(values); // [3, 42, "foo"]
});

वादा.दौड़

Promise.race तब फायदेमंद होता है जब आपको सबसे तेज़ ऑपरेशन के परिणाम की आवश्यकता होती है।

उदाहरण:
const promise1 = new Promise((resolve, reject) => {
  setTimeout(resolve, 500, 'one');
});

const promise2 = new Promise((resolve, reject) => {
  setTimeout(resolve, 100, 'two');
});

Promise.race([promise1, promise2]).then(value => {
  console.log(value); // "two"
});

Async/प्रतीक्षा के साथ एसिंक्रोनस कोड को सरल बनाना

एसिंक/वेट सिंटैक्स आपको एसिंक्रोनस कोड लिखने की अनुमति देता है जो सिंक्रोनस दिखता है, पठनीयता बढ़ाता है और वादों की श्रृंखला की जटिलता को कम करता है।

उदाहरण:
async function fetchData() {
  return 'data';
}

async function processData() {
  try {
    const data = await fetchData();
    console.log(data);
  } catch (error) {
    console.error(error);
  }
}

processData();

निष्कर्ष

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

विज्ञप्ति वक्तव्य यह आलेख यहां पुन: प्रस्तुत किया गया है: https://dev.to/dariansdev/js-promise-or-callback-704?1 यदि कोई उल्लंघन है, तो कृपया इसे हटाने के लिए [email protected] से संपर्क करें।
नवीनतम ट्यूटोरियल अधिक>

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

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

Copyright© 2022 湘ICP备2022001581号-3