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

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警告来解析。我真的看不到我要去哪里错了,也许您会多加注意。

最佳答案

您应该将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 });
    });
});


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

关于node.js - NodeJ中拒绝的 promise 解决,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59460767/

10-11 04:27