Kodokon kodokon.com

डिबगिंग और मज़बूती: try/catch, उन्नत console, कस्टम एरर

समर्पित क्लासेस, सही जगह लगी catch सीमाओं, और अपनी पूरी क्षमता तक इस्तेमाल किए गए console के साथ एक स्पष्ट एरर रणनीति बनाएँ।

9 मिनट · 3 प्रश्न

इस पाठ को Kodokon में खोलें

मज़बूती हर एरर को पकड़ने के बारे में नहीं है, बल्कि उन्हें सही जगह पकड़ने के बारे में है। मैदानी नियम: बग के जितना संभव हो उतना करीब जल्दी और खुलकर फ़ेल हों (वैलिडेशन, इनवैरिएंट), और केवल उन सीमाओं पर पकड़ें जहाँ आप सचमुच प्रतिक्रिया दे सकते हैं: कोई संदेश दिखाएँ, फिर से कोशिश करें, लॉग करें। ऐसा try/catch जो कुछ भी उपयोगी नहीं करता, कोड को अधिक सुरक्षित नहीं बनाता; वह विफलताओं को मौन बना देता है।

JAVASCRIPT
function parseConfig(json) {
  try {
    return JSON.parse(json);
  } catch (error) {
    console.error("Unreadable config:", error.message);
    throw error; // rethrow: nothing can be fixed here
  } finally {
    console.log("Finished reading configuration");
  }
}
लॉग करें, फिर दोबारा फेंकें: ऊपर की सीमा तय करेगी।

सादे स्ट्रिंग किसी एरर रणनीति का निर्माण नहीं करतीं। ऐसी क्लासेस बनाने के लिए Error को विस्तारित करें जो संरचित डेटा (HTTP स्टेटस, अमान्य फ़ील्ड) साथ लेकर चलें और जिन्हें instanceof से विभेदित किया जा सके। ES2022 से, cause विकल्प मूल एरर को उच्च-स्तरीय एरर के साथ जोड़ देता है: आप तकनीकी सुराग खोए बिना एक स्पष्ट व्यावसायिक संदेश उजागर करते हैं।

JAVASCRIPT
class ApiError extends Error {
  constructor(message, status, options) {
    super(message, options);
    this.name = "ApiError";
    this.status = status;
  }
}
try {
  const low = new Error("socket timeout");
  throw new ApiError("Profile unavailable", 503,
    { cause: low });
} catch (error) {
  if (error instanceof ApiError) {
    console.error(error.status, error.cause.message);
  }
}
तकनीकी कारण को संरक्षित करते हुए एक विभेदनीय व्यावसायिक एरर।

console log से कहीं ज़्यादा प्रदान करता है: console.table ऑब्जेक्ट के संग्रहों को पंक्तिबद्ध करता है, group/groupEnd आउटपुट को नेस्ट करते हैं, time/timeEnd किसी अवधि को मापते हैं, console.assert केवल तभी लॉग करता है जब शर्त गलत हो, और console.trace मौजूदा कॉल स्टैक प्रिंट करता है। मिलकर, ये टूल गुमनाम log कॉल की बारिश को आसानी से मात देते हैं।

JAVASCRIPT
const users = [
  { name: "Ada", role: "admin" },
  { name: "Linus", role: "dev" },
];
console.table(users);
console.group("Checks");
console.assert(users.length > 0, "Empty list");
console.time("sort");
users.sort((a, b) => a.name.localeCompare(b.name));
console.timeEnd("sort");
console.groupEnd();
संरचित आउटपुट: table, group, assertion और timer।

ज्ञान जांच

सुनिश्चित करें कि आपको इस पाठ के मुख्य बिंदु याद हैं।

  1. finally ब्लॉक कब चलता है?
    • केवल तभी जब कोई एरर न फेंका गया हो
    • केवल तभी जब catch ट्रिगर हुआ हो
    • हर हाल में, किसी return या throw के बाद भी
  2. किसी एरर के निर्माण के समय cause विकल्प किस लिए होता है?
    • एरर को प्रसारित होने से रोकने के लिए
    • मूल एरर को जोड़ने और तकनीकी संदर्भ को संरक्षित करने के लिए
    • HTTP स्टेटस कोड स्वतः सेट करने के लिए
    • एक नया catch ट्रिगर करने के लिए
  3. console.assert(condition, message) का व्यवहार क्या है?
    • यह संदेश केवल तभी लॉग करता है जब शर्त गलत हो
    • यदि शर्त गलत हो तो यह एक अपवाद फेंकता है
    • यह संदेश केवल तभी लॉग करता है जब शर्त सही हो