我无法兑现被拒绝的承诺,也不知道我要去哪里错了。这就是我所拥有的
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/