समर्पित क्लासेस, सही जगह लगी catch सीमाओं, और अपनी पूरी क्षमता तक इस्तेमाल किए गए console के साथ एक स्पष्ट एरर रणनीति बनाएँ।
इस पाठ को Kodokon में खोलेंमज़बूती हर एरर को पकड़ने के बारे में नहीं है, बल्कि उन्हें सही जगह पकड़ने के बारे में है। मैदानी नियम: बग के जितना संभव हो उतना करीब जल्दी और खुलकर फ़ेल हों (वैलिडेशन, इनवैरिएंट), और केवल उन सीमाओं पर पकड़ें जहाँ आप सचमुच प्रतिक्रिया दे सकते हैं: कोई संदेश दिखाएँ, फिर से कोशिश करें, लॉग करें। ऐसा try/catch जो कुछ भी उपयोगी नहीं करता, कोड को अधिक सुरक्षित नहीं बनाता; वह विफलताओं को मौन बना देता है।
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 विकल्प मूल एरर को उच्च-स्तरीय एरर के साथ जोड़ देता है: आप तकनीकी सुराग खोए बिना एक स्पष्ट व्यावसायिक संदेश उजागर करते हैं।
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 कॉल की बारिश को आसानी से मात देते हैं।
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();finally ब्लॉक कब चलता है?cause विकल्प किस लिए होता है?console.assert(condition, message) का व्यवहार क्या है?