The return
purpose is to terminate the execution of the function after the rejection, and prevent the execution of the code after it.
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);
});
}
In this case it prevents the resolve(numerator / denominator);
from executing, which is not strictly needed. However, it's still preferable to terminate the execution to prevent a possible trap in the future. In addition, it's a good practice to prevent running code needlessly.
Background
A promise can be in one of 3 states:
- pending - initial state. From pending we can move to one of the other states
- fulfilled - successful operation
- rejected - failed operation
When a promise is fulfilled or rejected, it will stay in this state indefinitely (settled). So, rejecting a fulfilled promise or fulfilling a rejected promise, will have not effect.
This example snippet shows that although the promise was fulfilled after being rejected, it stayed rejected.
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));
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…