मैं यहाँ थोड़ा अलग जवाब देने जा रहा हूँ: हाँ, दोनों 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
इसके बजाय का उपयोग करें ।