return 与 resolve/reject
2018-06-25 本文已影响14人
mugbya
在接手的代码中遇到逻辑(真实代码复杂)如下的代码:
function divide(numerator, denominator) {
return new Promise((resolve, reject) => {
if (denominator === 0) {
reject('Cannot divide by 0');
}
console.log('other some operating');
const res = numerator / denominator;
resolve(res);
});
}
divide(5, 0)
.then((result) => console.log('result: ', result))
.catch((error) => console.log('error: ', error));
执行输入为:
other some operating
error: Cannot divide by 0
在进入 if 条件后, 依然顺序执行到后面,只是在 reject跟 resolve,最终还是返回了 reject。 那这里面其实就有歧义了,甚至错误了。
歧义不难理解,如果再if外面再写一些数据库插入或者更新的操作,那不是产生了脏数据了么!!!
怎么避免这种歧义或者错误呢???
这里推荐在 reject 后面显示使用return,使后面的代码不执行,如:
function divide(numerator, denominator) {
return new Promise((resolve, reject) => {
if (denominator === 0) {
reject('Cannot divide by 0');
return;
}
console.log('other some operating');
const res = numerator / denominator;
resolve(res);
});
}
divide(5, 0)
.then((result) => console.log('result: ', result))
.catch((error) => console.log('error: ', error));
此时执行结果如下:
error: Cannot divide by 0