मैं यहाँ थोड़ा अलग जवाब देने जा रहा हूँ: हाँ, दोनों tryऔर finallyब्लॉक निष्पादित हो जाते हैं, और finallyएक फ़ंक्शन के लिए वास्तविक "वापसी" मूल्य पर पूर्वता लेता है। हालाँकि, ये रिटर्न मान हमेशा आपके कोड में उपयोग नहीं किए जाते हैं।
यहाँ पर क्यों:
- नीचे दिया गया उदाहरण
res.send()Express.js का उपयोग करेगा , जो एक HTTP प्रतिक्रिया बनाता है और इसे भेजता है।
- आपका
tryऔर finallyब्लॉक दोनों इस फ़ंक्शन को इस तरह निष्पादित करेंगे:
try {
// Get DB records etc.
return res.send('try');
} catch(e) {
// log errors
} finally {
return res.send('finally');
}
यह कोड tryआपके ब्राउज़र में स्ट्रिंग दिखाएगा । ALSO, उदाहरण आपके कंसोल में त्रुटि दिखाएगा। res.send()समारोह कहा जाता है दो बार । यह एक फ़ंक्शन के साथ कुछ भी होगा। कोशिश-कैच-एंड-ब्लॉक इस तथ्य को अप्रशिक्षित आंख को बाधित करेगा, क्योंकि (व्यक्तिगत रूप से) मैं केवल returnफ़ंक्शन-स्कॉप्स के साथ मूल्यों को जोड़ता हूं ।
Imho तुम्हारा सबसे अच्छा शर्त एक ब्लॉक के अंदर कभी उपयोग नहीं करना returnहैfinally । यह आपके कोड और संभावित रूप से मुखौटा त्रुटियों को ओवरप्ले करेगा।
वास्तव में, PHPStorm में एक डिफ़ॉल्ट कोड निरीक्षण नियम सेट-अप है जो इसके लिए "चेतावनी" देता है:
https://www.jetbrains.com/help/phpstorm/javascript-and-typescript-return-inside-finally-block.html
तो आप किस चीज का उपयोग finallyकरते हैं?
मैं finallyकेवल साफ-सफाई के सामान का उपयोग करूंगा । कुछ भी जो किसी फ़ंक्शन के रिटर्न मान के लिए महत्वपूर्ण नहीं है।
अगर आप इसके बारे में सोचते अर्थपूर्ण हो सकता है, क्योंकि जब आप कोड के तहत की एक पंक्ति पर निर्भर करते हैं finally, तो आप मानते हैं कि वहाँ में त्रुटियों हो सकता है tryया catch। लेकिन वे अंतिम 2 त्रुटि से निपटने के वास्तविक निर्माण खंड हैं। बस एक returnमें tryऔर catchइसके बजाय का उपयोग करें ।