我当前正在编写一个登录服务器功能,我无法弄清楚为什么我所创建的姿势没有被调用
我使用mongodb和mongoose作为后端,并使用有效的User.findOne连接到后端。我不知道为什么Test和test2的底部console.log永远不会被解雇。
我对诺言和异步很陌生,我不知道自己缺少什么
class HandlerGenerator {
login (req, res) {
console.log('debguh1')
let username = req.body.username;
let password = req.body.password;
let checkUsername = "";
let checkPassword = "";
var lData = {
username: req.body.username,
password: req.body.password
};
var myPromise = () => {
return new Promise((resolve, reject) => {
console.log('db2')
User.findOne(lData , function(err, userLogin){
if(err){
console.log(err);
return
}
console.log(userLogin)
checkUsername = userLogin.username;
checkPassword = userLogin.password;
});
});
};
var callMyPromise = async () => {
var result = await (myPromise());
// call code here
console.log("Test1")
resolve(result);
//return result
};
callMyPromise().then(function(result) {
console.log('Test2')
res.json(result);
});
}
}
答案 0 :(得分:1)
我猜您正在使用猫鼬进行查询,.exec()
返回了一个承诺。
通过使您的登录方法异步,您现在可以等待响应。但是请确保将try等待包装在try catch块或HOF中,以处理错误/或找不到用户。
class HandlerGenerator {
async login(req, res) {
let { username, password } = req.body;
let checkUsername = "";
let checkPassword = "";
var lData = {
username
password
};
try {
const userData = await User.findOne(lData).exec();
res.json(userData);
} catch (e) {
// do some error handling in here
}
}
}