美文网首页
return 与 resolve/reject

return 与 resolve/reject

作者: mugbya | 来源:发表于2018-06-25 14:58 被阅读14次

    在接手的代码中遇到逻辑(真实代码复杂)如下的代码:

    
    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
    

    相关文章

      网友评论

          本文标题:return 与 resolve/reject

          本文链接:https://www.haomeiwen.com/subject/cvdyyftx.html