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
上一篇下一篇

猜你喜欢

热点阅读