return
उद्देश्य अस्वीकृति के बाद समारोह के निष्पादन को समाप्त, और यह करने के बाद कोड के निष्पादन को रोकने के लिए है।
function divide(numerator, denominator) {
return new Promise((resolve, reject) => {
if (denominator === 0) {
reject("Cannot divide by 0");
return; // The function execution ends here
}
resolve(numerator / denominator);
});
}
इस मामले में यह resolve(numerator / denominator);
निष्पादित करने से रोकता है , जिसकी सख्त आवश्यकता नहीं है। हालांकि, भविष्य में संभावित जाल को रोकने के लिए निष्पादन को समाप्त करना अभी भी बेहतर है। इसके अलावा, अनावश्यक रूप से कोड को रोकने के लिए यह एक अच्छा अभ्यास है।
पृष्ठभूमि
एक वादा 3 राज्यों में से एक में हो सकता है:
- लंबित - प्रारंभिक अवस्था। लंबित से हम दूसरे राज्यों में जा सकते हैं
- पूरा - सफल ऑपरेशन
- अस्वीकृत - विफल संचालन
जब कोई वादा पूरा या खारिज कर दिया जाता है, तो वह इस राज्य में अनिश्चित काल तक (स्थाई) रहेगा। इसलिए, एक पूरा किया हुआ वादा ठुकरा देना या एक ठुकराया हुआ वादा पूरा करना, असर नहीं करेगा।
यह उदाहरण स्निपेट से पता चलता है कि हालांकि वादे को अस्वीकार किए जाने के बाद पूरा किया गया था, यह अस्वीकार कर दिया गया।
function divide(numerator, denominator) {
return new Promise((resolve, reject) => {
if (denominator === 0) {
reject("Cannot divide by 0");
}
resolve(numerator / denominator);
});
}
divide(5,0)
.then((result) => console.log('result: ', result))
.catch((error) => console.log('error: ', error));
तो हमें लौटने की आवश्यकता क्यों है?
यद्यपि हम एक सुलझे हुए वादे को नहीं बदल सकते हैं, अस्वीकार या हल करने से बाकी फ़ंक्शन का निष्पादन नहीं होगा। फ़ंक्शन में कोड हो सकता है जो भ्रामक परिणाम पैदा करेगा। उदाहरण के लिए:
function divide(numerator, denominator) {
return new Promise((resolve, reject) => {
if (denominator === 0) {
reject("Cannot divide by 0");
}
console.log('operation succeeded');
resolve(numerator / denominator);
});
}
divide(5, 0)
.then((result) => console.log('result: ', result))
.catch((error) => console.log('error: ', error));
भले ही फ़ंक्शन में अभी ऐसा कोड नहीं है, लेकिन यह भविष्य में एक संभावित जाल बनाता है। एक भविष्य के रिफ्लेक्टर इस तथ्य को अनदेखा कर सकते हैं कि वादा खारिज होने के बाद भी कोड को निष्पादित किया जाता है, और डिबग करना कठिन होगा।
संकल्प / अस्वीकार के बाद निष्पादन रोकना:
यह मानक JS नियंत्रण प्रवाह सामग्री है।
resolve
/ के बाद वापसी reject
:
function divide(numerator, denominator) {
return new Promise((resolve, reject) => {
if (denominator === 0) {
reject("Cannot divide by 0");
return;
}
console.log('operation succeeded');
resolve(numerator / denominator);
});
}
divide(5, 0)
.then((result) => console.log('result: ', result))
.catch((error) => console.log('error: ', error));
resolve
/ reject
- के साथ वापसी / कॉलबैक के वापसी मूल्य को नजरअंदाज कर दिया है के बाद से, हम अस्वीकार / हल बयान वापस करके एक पंक्ति बचा सकते हैं:
function divide(numerator, denominator) {
return new Promise((resolve, reject) => {
if (denominator === 0) {
return reject("Cannot divide by 0");
}
console.log('operation succeeded');
resolve(numerator / denominator);
});
}
divide(5, 0)
.then((result) => console.log('result: ', result))
.catch((error) => console.log('error: ', error));
- अगर / किसी अन्य ब्लॉक का उपयोग करना:
function divide(numerator, denominator) {
return new Promise((resolve, reject) => {
if (denominator === 0) {
reject("Cannot divide by 0");
} else {
console.log('operation succeeded');
resolve(numerator / denominator);
}
});
}
divide(5, 0)
.then((result) => console.log('result: ', result))
.catch((error) => console.log('error: ', error));
मैं एक return
विकल्प का उपयोग करना पसंद करता हूं क्योंकि कोड चापलूसी है।