假设我有以下代码。
function divide(numerator, denominator) {
return new Promise((resolve, reject) => {
if(denominator === 0){
reject("Cannot divide by 0");
return; //superfluous?
}
resolve(numerator / denominator);
});
}
如果我的目的是要reject
早退,那么我是否也应该养成return
事后立即饮食的习惯?
的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);
执行,这不是严格要求的。但是,仍然最好终止执行,以防止将来可能出现陷阱。另外,防止不必要地运行代码是一个好习惯。
背景
一个承诺可以处于以下三种状态之一:
当一个诺言被兑现或被拒绝时,它会无限期地保持这种状态(结算)。因此,拒绝履行承诺或履行拒绝承诺将没有效果。
此示例片段显示,尽管诺言在被拒绝后就已兑现,但它仍然被拒绝。
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
-由于忽略了回调的返回值,我们可以通过返回reject / resolve语句保存一行: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
选项,因为代码比较扁平。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句