NodeJ中拒绝的承诺解决

时间:2019-12-23 20:04:05

标签: node.js express promise

我无法兑现被拒绝的承诺,也不知道我要去哪里错了。这就是我的

exports.signIn = (username, password) => {
  return new Promise((resolve, reject) => {
    pool.query(
     "select * from user where username=? order by id asc limit 1",
     [username],
     (err, result, fields) => {
     if (!err) {
      console.log("user result: ", result);
      if (result.length === 1) {
        let user = result[0];
        bcrypt.compare(password, user.password, (error, res) => {
          if (error) {
            reject(error);
          }
          if (res) {
            console.log("user found: ",user.username);
            resolve(user);
          } else {
            console.log("Incorrect password");
            reject("Unauthorized Access");
          }
        });
      } else {
        console.log("user not found");
        reject("Invalid username");
      }
    }
  }
);
});
};

这就是我使用诺言的方式

app.post("/signin", (req, res, next) => {
 let body = req.body;
 let password = body.password;
 let username = body.username;
 db.signIn(username, password)
   .catch(err => {
     res.status(200).json({ err });
    })
   .then(result => {
     console.log("signin: ", result);
     res.status(200).json({ result });
   });
});

当我输入正确的密码时,它可以正确解决,但是当我输入错误的密码时,它仍然可以通过登录控制台消息和UnhandledPromiseRejectionWarning警告来解决。我真的看不到我要去哪里错了,也许会多加注意。

1 个答案:

答案 0 :(得分:4)

您应将promise用作:

app.post("/signin", (req, res, next) => {
  let body = req.body;
  let password = body.password;
  let username = body.username;
  db.signIn(username, password)
    .then(result => {
      console.log("signin: ", result);
      res.status(200).json({ result });
    }).catch(err => {
      res.status(200).json({ err });
    });
});

因为,在捕获之后,如果您要添加任意数量的then处理,它将全部执行。