我不知道为什么我不能正确地链接承诺,这是我的代码
app.post('/login', urlencodedParser, async (req, res) => {
// authenticate is async function that return promise
model.authenticate(req.body.uname, req.body.pword)
.then(function (result) {
console.log(result);
// ... some codes
});
});
// here is the function authenticate
async function authenticate(uname, pword) {
User.find({username: uname}, 'password', function (err, result) {
if (err !== null){
return new Promise(function (resolve, reject) {
resolve(false);
});
}
else{
if (pword === result[0].password){
console.log("Correct Password!");
return new Promise(function (resolve, reject) {
resolve(true);
});
}
但是我的控制台中的输出是
undefined
Correct Password!
,表示在完成身份验证之前实现.then()。 那么我怎么能以更好的方式编码呢?非常感谢你!
答案 0 :(得分:2)
问题是你从回调函数返回promise。这样做没有意义。您需要从authenticate
函数&中返回一个承诺。一旦该功能完成预期的工作,就解决/拒绝它。请查看以下代码,它应该解决您的问题
/* This function doesnt need to be async */
function authenticate(uname, pword) {
return new Promise((resolve, reject) => {
User.find({username: uname}, 'password', function (err, result) {
if (err !== null) {
/* I think this should be reject(err) but since you wish to have it resolved in your code, i have kept resolve()*/
resolve(false);
}
else {
if (pword === result[0].password) {
console.log("Correct Password!");
resolve(true);
}
}
})
});
}
答案 1 :(得分:1)
问题是您的身份验证功能的主体不会返回任何内容。它调用异步函数,它使用回调函数,然后返回一个隐式的函数,并将其解析为2.3.1p112 (2016-04-26 revision 54768) [x86_64-linux]
。
undefined
您需要将async function authenticate(uname, pword) {
User.find({username: uname}, 'password', function (err, result) {
// This will run sometime after authenticate returns
});
}
调用包含在承诺中。
User.find
答案 2 :(得分:1)
使用.main-wrapper{
padding:15px;
}
.header,
.footer{
text-align: center;
}
.header p,
.footer p{
padding:10px;
background-color: green;
color: white;
}
.content{
height: 200px;
overflow: scroll;
}
.content-card{
border-bottom: 1px solid black;
}
:
async
没有async function authenticate(uname, pword) {
return await User.find({ username: uname }, 'password').then(function (result) { ... })
};
:
async