खोज…


वाक्य - विन्यास

  • {...} पकड़ने की कोशिश करो (त्रुटि) {...}
  • {...} अंत में {...} प्रयास करें
  • {{}} कैच (त्रुटि) {…} अंत में {…} कोशिश करें
  • नई त्रुटि ([संदेश]) फेंकें;
  • फेंक त्रुटि ([संदेश]);

टिप्पणियों

try आपको कोड के एक ब्लॉक को त्रुटियों के लिए परीक्षण करने try अनुमति देती है जबकि इसे निष्पादित किया जा रहा है।

यदि आप try ब्लॉक में कोई त्रुटि होती है तो catch आपको कोड के एक ब्लॉक को परिभाषित करने की अनुमति देता है।

finally आपको परिणाम की परवाह किए बिना कोड निष्पादित करने देता है। हालांकि, सावधान रहें कि अंत में ब्लॉक खत्म होने तक क्रियान्वयन की कोशिश और कैच ब्लॉक के नियंत्रण प्रवाह बयानों को निलंबित कर दिया जाएगा।

वादे के साथ बातचीत

6

अपवाद सिंक्रोनस कोड के लिए हैं, जो खारिज किए गए अतुल्यकालिक कोड का वादा करते हैं। यदि किसी वादे के हैंडलर में अपवाद को फेंक दिया जाता है, तो इसकी त्रुटि स्वतः पकड़ ली जाएगी और इसके बजाय वादे को अस्वीकार कर दिया जाएगा।

Promise.resolve(5)
    .then(result => {
        throw new Error("I don't like five");
    })
    .then(result => {
        console.info("Promise resolved: " + result);
    })
    .catch(error => {
        console.error("Promise rejected: " + error);
    });

Promise rejected: Error: I don't like five
7

ईसीएमएस्क्रिप्ट 2017 का हिस्सा होने के लिए एसिंक्स फ़ंक्शन प्रस्ताव- अप्रत्याशित है-इसे विपरीत दिशा में विस्तारित करता है। यदि आप अस्वीकार किए गए वादे का इंतजार करते हैं, तो इसकी त्रुटि अपवाद के रूप में उठाई गई है:

async function main() {
  try {
    await Promise.reject(new Error("Invalid something"));
  } catch (error) {
    console.log("Caught error: " + error);
  }
}
main();

Caught error: Invalid something

वस्तुओं में त्रुटि

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

Error निर्माता के लिए पहला पैरामीटर मानव-पठनीय त्रुटि संदेश है। आपको हमेशा एक गलत त्रुटि संदेश निर्दिष्ट करने का प्रयास करना चाहिए जो गलत हो गया, भले ही अतिरिक्त जानकारी कहीं और मिल जाए।

try {
   throw new Error('Useful message');
} catch (error) {
   console.log('Something went wrong! ' + error.message);
}

संचालन के आदेश प्लस उन्नत विचार

ट्रायल कैच ब्लॉक के बिना, अपरिभाषित फ़ंक्शन त्रुटियों को फेंक देंगे और निष्पादन को रोक देंगे:

undefinedFunction("This will not get executed");
console.log("I will never run because of the uncaught error!");

कोई त्रुटि करेगा और दूसरी पंक्ति नहीं चलाएगा:

// Uncaught ReferenceError: undefinedFunction is not defined

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

try {
    undefinedFunction("This will not get executed");
} catch(error) {
    console.log("An error occured!", error);
} finally {
    console.log("The code-block has finished");
}
console.log("I will run because we caught the error!");

अब, हमने त्रुटि पकड़ी है और यह सुनिश्चित कर सकते हैं कि हमारा कोड निष्पादित होने वाला है

// An error occured! ReferenceError: undefinedFunction is not defined(…)
// The code-block has finished
// I will run because we caught the error!

क्या होगा यदि हमारे कैच ब्लॉक में कोई त्रुटि होती है !?

try {
    undefinedFunction("This will not get executed");
} catch(error) {
    otherUndefinedFunction("Uh oh... ");
    console.log("An error occured!", error);
} finally {
    console.log("The code-block has finished");
}
console.log("I won't run because of the uncaught error in the catch block!");

हम अपने शेष ब्लॉक को संसाधित नहीं करेंगे, और अंत में ब्लॉक को छोड़कर निष्पादन समाप्त हो जाएगा।

// The code-block has finished
// Uncaught ReferenceError: otherUndefinedFunction is not defined(…)

तुम हमेशा अपनी कोशिश पकड़ ब्लॉक घोंसला सकता है .. लेकिन तुम क्योंकि बहुत गन्दा हो जाएगा नहीं करना चाहिए ..

try {
    undefinedFunction("This will not get executed");
} catch(error) {
    try {
        otherUndefinedFunction("Uh oh... ");
    } catch(error2) {
        console.log("Too much nesting is bad for my heart and soul...");
    }
    console.log("An error occured!", error);
} finally {
    console.log("The code-block has finished");
}
console.log("I will run because we caught the error!");

पिछले उदाहरण से सभी त्रुटियों को पकड़ेंगे और निम्नलिखित को लॉग करेंगे:

//Too much nesting is bad for my heart and soul...
//An error occured! ReferenceError: undefinedFunction is not defined(…)
//The code-block has finished
//I will run because we caught the error!

तो, हम सभी त्रुटियों को कैसे पकड़ सकते हैं !? अपरिभाषित चर और कार्यों के लिए: आप नहीं कर सकते।

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

अविश्वसनीय तरीके से या अपवाद फेंकने के तरीकों को कॉल करने के लिए संरक्षित तरीके के बिना:

function foo(a, b, c) {
    console.log(a, b, c);
    throw new Error("custom error!");
}
try {
    foo(1, 2, 3);
} catch(e) { 
    try {
        foo(4, 5, 6); 
    } catch(e2) {
        console.log("We had to nest because there's currently no other way...");
    }
    console.log(e);
}
// 1 2 3
// 4 5 6
// We had to nest because there's currently no other way...
// Error: custom error!(…)

और सुरक्षा के साथ:

function foo(a, b, c) {
    console.log(a, b, c);
    throw new Error("custom error!");
}
function protectedFunction(fn, ...args) {
    try {
        fn.apply(this, args);
    } catch (e) {
        console.log("caught error: " + e.name + " -> " + e.message);
    }
}

protectedFunction(foo, 1, 2, 3);
protectedFunction(foo, 4, 5, 6);

// 1 2 3
// caught error: Error -> custom error!
// 4 5 6
// caught error: Error -> custom error!

हम त्रुटियों को पकड़ते हैं और फिर भी सभी अपेक्षित कोड को संसाधित करते हैं, हालांकि कुछ अलग वाक्यविन्यास के साथ। किसी भी तरह से काम करेगा, लेकिन जैसा कि आप अधिक उन्नत अनुप्रयोगों का निर्माण करते हैं आप अपनी त्रुटि से निपटने के तरीकों के बारे में सोचना शुरू करना चाहेंगे।

त्रुटि प्रकार

जावास्क्रिप्ट में छह विशिष्ट कोर त्रुटि निर्माता हैं:

  • EvalError - एक त्रुटि बनाता है जो वैश्विक फ़ंक्शन eval() संबंध में एक त्रुटि का प्रतिनिधित्व करता है।

  • InternalError - एक त्रुटि का प्रतिनिधित्व करता है जो जावास्क्रिप्ट इंजन में एक आंतरिक त्रुटि होने पर होता है। उदाहरण के लिए "बहुत अधिक पुनरावृत्ति"। (केवल मोज़िला फ़ायरफ़ॉक्स द्वारा समर्थित)

  • RangeError - एक त्रुटि का प्रतिनिधित्व करता है जो तब होता है जब एक संख्यात्मक चर या पैरामीटर इसकी मान्य सीमा के बाहर होता है।

  • ReferenceError - एक त्रुटि का प्रतिनिधित्व करते हुए एक उदाहरण बनाता है जो एक अमान्य संदर्भ को dereferencing करते समय होता है।

  • SyntaxError - एक सिंटैक्स त्रुटि का प्रतिनिधित्व करने वाला एक उदाहरण बनाता है जो eval() में कोड पार्स करते समय होता है।

  • TypeError - एक त्रुटि का प्रतिनिधित्व करता है जो तब होता है जब एक चर या पैरामीटर मान्य प्रकार का नहीं होता है।

  • URIError - एक उदाहरण एक त्रुटि जब तब होता है का प्रतिनिधित्व बनाता encodeURI() या decodeURI() अमान्य पैरामीटर पारित कर रहे हैं।

यदि आप एरर हैंडलिंग मैकेनिज्म को लागू कर रहे हैं, तो आप यह देख सकते हैं कि आप किस तरह की त्रुटि कोड से पकड़ रहे हैं।

try {
    throw new TypeError();
}
catch (e){
    if(e instanceof Error){
        console.log('instance of general Error constructor');
    }

    if(e instanceof TypeError) {
        console.log('type error');
    }
}

इस तरह के मामले में e TypeError उदाहरण होगा। सभी त्रुटि प्रकार आधार निर्माता का विस्तार Error है, इसलिए यह भी का एक उदाहरण है Error

यह ध्यान में रखते हुए हमें दिखाता है कि Error का एक उदाहरण होने के लिए e जाँच करना ज्यादातर मामलों में बेकार है।



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow